我在 SQL Server 中有一个这样的表(示例):
ID | 文章 | ARTTEXT | COUNT |
---|---|---|---|
1 | 123456 | 测试1 | 5 |
2 | 324644 | blabla | 1 |
3 | 765456 | 娜娜 | 12 |
现在这些物品要贴上标签。 IE。每个副本都需要一个标签。然后我通过 SSRS 执行此操作。
所以我需要从 ID 1 5 个标签,ID 2 1,ID 3 12。
现在的问题是从 ID 1 获取 5 行、从 ID 2 获取 1 行和从 ID 3 获取 12 行的选择是什么样的。
我猜是 CTE,但我不清楚如何获得 x 倍的记录
我期待您的想法。
答案 0 :(得分:2)
我会在(慢得多的)rCTE 解决方案上使用 Tally。我在这里使用内联计数。如果您需要超过 100 行,只需在定义为 N
的 CTE 中向 Tally
添加更多交叉联接(每个交叉联接将最大行数增加一个因子或 10)。
CREATE TABLE dbo.YourTable (ID int,
Article int,
Arttext varchar(15),
[Count] int);
INSERT INTO dbo.YourTable
VALUES(1,123456,'Test1',5),
(2,324644,'blabla',1),
(3,765456,'nanana',12);
GO
WITH N AS(
SELECT N
FROM (VALUES(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL))N(N)),
Tally AS(
SELECT TOP (SELECT MAX([Count]) FROM dbo.YourTable)
ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS I
FROM N N1, N N2) --100 rows, add more cross joins for more rows
SELECT YT.ID,
YT.Article,
YT.Arttext,
T.I AS [Count]
FROM dbo.YourTable YT
JOIN Tally T ON YT.[Count] >= T.I
ORDER BY YT.ID,
T.I;
GO
DROP TABLE dbo.YourTable;
答案 1 :(得分:0)
如果我理解正确,您想根据 count
乘以行数。一种方法使用递归 CTE:
with cte as (
select id, article, arttext, count
from t
union all
select id, article, arttext, count - 1
from cte
where count > 1
)
select id, article, arttext
from t;
如果计数超过 100,那么您需要 option (maxrecursion 0)
。