[英]Select to Return Multiple Rows from Single Row
我正在处理一个查询,该查询返回如下所示的项目列表:
SELECT ID, Description FROM TableA WHERE ID = 10001
返回值:
ID Description
10001 Item1 Item2 Item3 Item4
但是,我想要的是能够使返回多行。
ID Description
10001 Item1
10001 Item2
10001 Item3
10001 Item4
有没有简单的方法可以做到这一点?
谢谢!
这是您可以执行的操作:
SELECT id,
Split.a.value('.', 'VARCHAR(100)') AS String
FROM (SELECT id, CAST ('<M>' + REPLACE(description, ' ', '</M><M>') + '</M>' AS XML) AS n from TableA where id = 1001) AS A
CROSS APPLY n.nodes ('/M') AS Split(a);
您也可以这样创建一个函数
CREATE FUNCTION [dbo].[RowToManyRows] ( @StringInput VARCHAR(8000) )
RETURNS @OutputTable TABLE ( [String] VARCHAR(10) )
AS
BEGIN
DECLARE @String VARCHAR(10)
WHILE LEN(@StringInput) > 0
BEGIN
SET @String = LEFT(@StringInput,
ISNULL(NULLIF(CHARINDEX(' ', @StringInput) - 1, -1),
LEN(@StringInput)))
SET @StringInput = SUBSTRING(@StringInput,
ISNULL(NULLIF(CHARINDEX(' ', @StringInput), 0),
LEN(@StringInput)) + 1, LEN(@StringInput))
INSERT INTO @OutputTable ( [String] )
VALUES ( @String )
END
RETURN
END
GO
然后,您可以查询该函数
SELECT ID, String
FROM myTable CROSS APPLY [dbo].RowToManyRows(myTable.Description)
例:
CREATE TABLE myTable
( ID INT,
Description VARCHAR(50)
)
INSERT INTO dbo.myTable
( ID, Description )
VALUES ( 1, -- ID - int
'A B' -- Description - varchar(50)
),
(2,
'C D')
结果
1 A
1 B
2 C
2 D
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.