我有下表:
MyTable
PlaceID NameID Code CodeCount
1 1 1234A 2
1 2 1234A 3
1 3 1234A 1
2...
2...
3...
3...
我想选择1234A
where PlaceID
= 1,次数等于CodeCount
. 因此,结果将是这样的六行:
MyResult
Code
1234A
1234A
1234A
1234A
1234A
1234A
最终,这个选择将有一堆不同的代码用于单个PlaceID
. 是的,我知道我在复制数据,最后它不会很多,我将在下面解释我为什么要这样做。
首先,我需要得到计数的总和:
DECLARE @cdcnt INT = (SELECT SUM(CodeCount) FROM MyTable WHERE PlaceID = 1 AND Code = '1234A')
然后我可以将此值用作while循环中的控件来多次选择该值:
DECLARE @i INT = 0;
WHILE @i < @cdcnt
BEGIN
SELECT DISTINCT Code
FROM MyTable
WHERE PlaceID = 1 AND Code = '1234A'
SET @i = @i + 1
END
问题是我得到 6 个单独的选择,而不是 6 行的一个选择。如何创建MyResult
如上所示,而不是 6 个单独的选择?
为什么我这样做:我想使用随机数生成器来选择一个Code
,它的出现频率为每个PlaceID
(还会Codes
添加其他的,我还在想办法只做一个)。我愿意接受有关不同方法的建议,但这是我能弄清楚的唯一方法。如果已经构建了一个功能来根据设定的频率从列表中进行选择,我会全力以赴。
下面是一个使用连接到计数 CTE 的示例。最好创建一个具体化的计数/数字表来促进此类任务的进行并提高性能。