希望从一行中选择多行



我在SQL Server中有一个表,如下所示(示例(:

ARTTEXTCOUNT5<1>nanana>
ID 文章
1 23456 测试1
2 324644 布拉
3 76545612

我会使用Tally over the(慢得多(rCTE解决方案。我在这里使用内联计数。如果需要超过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;

如果我理解正确,您希望根据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)

最新更新