Tenho a seguinte tabela:
MyTable
PlaceID NameID Code CodeCount
1 1 1234A 2
1 2 1234A 3
1 3 1234A 1
2...
2...
3...
3...
Eu quero selecionar 1234A
onde PlaceID
= 1, o número de vezes igual à soma do CodeCount
. Então, o resultado seria seis linhas assim:
MyResult
Code
1234A
1234A
1234A
1234A
1234A
1234A
Eventualmente, essa seleção terá vários códigos diferentes para um único arquivo PlaceID
. SIM eu sei que estou duplicando dados, no final não vai ser muito e vou explicar porque estou fazendo isso abaixo.
Primeiro, eu precisava obter a soma das contagens:
DECLARE @cdcnt INT = (SELECT SUM(CodeCount) FROM MyTable WHERE PlaceID = 1 AND Code = '1234A')
Então eu posso usar esse valor como um controle em um loop while para selecionar o valor que muitas vezes:
DECLARE @i INT = 0;
WHILE @i < @cdcnt
BEGIN
SELECT DISTINCT Code
FROM MyTable
WHERE PlaceID = 1 AND Code = '1234A'
SET @i = @i + 1
END
O problema é que recebo 6 seleções separadas, em vez de uma seleção com 6 linhas. Como faço para criar MyResult
mostrado acima, em vez de 6 seleções separadas?
Por que estou fazendo isso: quero usar um gerador de números aleatórios para escolher um Code
com a frequência em que ele aparece agregado para cada um PlaceID
(haverá outros Codes
adicionados, ainda estou descobrindo como fazer apenas um). Estou aberto a sugestões de diferentes maneiras de fazer isso, mas é a única maneira de descobrir como. Se houver uma função já construída para escolher de uma lista de acordo com frequências definidas, sou todo ouvidos.