[英]Select to Return Multiple Rows from Single Row
I am working on a query that returns a list of items shown below: 我正在处理一个查询,该查询返回如下所示的项目列表:
SELECT ID, Description FROM TableA WHERE ID = 10001
Returns: 返回值:
ID Description
10001 Item1 Item2 Item3 Item4
However, what I want is to be able to make the return multiple rows. 但是,我想要的是能够使返回多行。
ID Description
10001 Item1
10001 Item2
10001 Item3
10001 Item4
Is there an easy way to achieve this? 有没有简单的方法可以做到这一点?
Thank you! 谢谢!
Here is how you can do this: 这是您可以执行的操作:
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);
Fiddle http://sqlfiddle.com/#!3/152e3/1 小提琴http://sqlfiddle.com/#!3/152e3/1
You can also create a function to do that as such 您也可以这样创建一个函数
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
You then query that function as such 然后,您可以查询该函数
SELECT ID, String
FROM myTable CROSS APPLY [dbo].RowToManyRows(myTable.Description)
Example: 例:
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')
Results 结果
1 A
1 B
2 C
2 D
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.