想要 1 行中的多行

Want multiple Rows from 1 Row

我在 SQL 服务器中有一个 table 像这样(示例):

ID 文章 艺术文字 计数
1 123456 测试 1 5
2 324644 blabla 1
3 765456 娜娜娜 12

现在要对这些项目进行标记。 IE。每个副本都需要一个标签。然后我通过 SSRS 执行此操作。

所以我需要 ID 1 5 个标签,ID 2 1,ID 3 12。

现在的问题是 select 从 ID 1 中获取 5 行,从 ID 2 中获取 1 行,从 ID 3 中获取 12 行。

我猜是 CTE,但我不清楚如何获得 x 倍的记录

期待您的想法。

如果我没理解错的话,你想乘以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)

我会在(慢得多的)rCTE 解决方案上使用 Tally。我在这里使用在线计数。如果您需要超过 100 行,只需在定义为 Tally 的 CTE 中向 N 添加更多交叉联接(每个交叉联接将最大行数增加一个因子或 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;