Sql 如何将每个ID的多行合并到特定列的一行中?
上面是Select语句返回的内容 我希望select语句为每个ID返回一行,并结合最后一列“Inputs”Sql 如何将每个ID的多行合并到特定列的一行中?,sql,function,tsql,concatenation,Sql,Function,Tsql,Concatenation,上面是Select语句返回的内容 我希望select语句为每个ID返回一行,并结合最后一列“Inputs” 我目前使用的是一个非常基本的select语句,但是这个select语句返回的行数超过5000行,而它返回的行数应该不到这个数字的一半。您可以编写类似这样的语句 ID NAME INPUTS 2 ABCD First Name 2 ABCD La
我目前使用的是一个非常基本的select语句,但是这个select语句返回的行数超过5000行,而它返回的行数应该不到这个数字的一半。您可以编写类似这样的语句
ID NAME INPUTS
2 ABCD First Name
2 ABCD Last Name
3 1234 First Name
3 1234 Last Name
6 QWERTY First Name
6 QWERTY Last Name
declare @YourTable table (RowID int, ID int, name varchar(100), inputs varchar(500))
insert into @YourTable VALUES (1,2,'ABCD', 'First Name')
insert into @YourTable VALUES (2,2,'ABCD', 'Last Name')
insert into @YourTable VALUES (3,3,'1234', 'First Name')
insert into @YourTable VALUES (4,3,'1234','Last Name')
--insert into @YourTable VALUES (5,3,'A & Z')
set nocount off
SELECT
t1.id, t1.name
,STUFF(
(SELECT
', ' + t2.inputs
FROM @YourTable t2
WHERE t1.id=t2.id
ORDER BY t2.inputs
FOR XML PATH(''), TYPE
).value('.','varchar(max)')
,1,2, ''
) AS inputs
FROM @YourTable t1
GROUP BY t1.id, t1.name
这将处理大多数情况:
- 没有名字
- 否
姓氏
- 没有名字
即使在特殊情况下可以做一些改进您也可以编写如下内容
declare @YourTable table (RowID int, ID int, name varchar(100), inputs varchar(500))
insert into @YourTable VALUES (1,2,'ABCD', 'First Name')
insert into @YourTable VALUES (2,2,'ABCD', 'Last Name')
insert into @YourTable VALUES (3,3,'1234', 'First Name')
insert into @YourTable VALUES (4,3,'1234','Last Name')
--insert into @YourTable VALUES (5,3,'A & Z')
set nocount off
SELECT
t1.id, t1.name
,STUFF(
(SELECT
', ' + t2.inputs
FROM @YourTable t2
WHERE t1.id=t2.id
ORDER BY t2.inputs
FOR XML PATH(''), TYPE
).value('.','varchar(max)')
,1,2, ''
) AS inputs
FROM @YourTable t1
GROUP BY t1.id, t1.name
这将处理大多数情况:
- 没有名字
- 否
姓氏
- 没有名字
即使在特殊情况下可以做一些改进您如何保证firstname优先于lastname?需要采取一些措施来执行这一命令。输入总是有两个值吗?如何保证firstname优先于lastname?需要采取一些措施来执行这一命令。输入总是有两个值吗?如何保证firstname优先于lastname?需要采取一些措施来执行这一命令。输入总是有2个值吗?Sébastien Sevrin-如果ID的“输入”值的数量不同怎么办?ID:2有2个输入值,ID:6有5个输入值。在这种情况下,您的查询将失败。@kiki47-我不明白您的意思,但无论如何,OP中甚至没有具体说明。我在帖子中说“对于特殊情况,可以做一些改进”,我认为最好保持查询尽可能简单,只有在必要时才进行更改。我认为代码应该是可靠的,并且应该能够接受不同的条件。sébastien Sevrin-查询不可靠,如果输入值更改,它将失败!!再见,巴斯蒂安·塞夫林-如果ID的“输入”值的数量不同怎么办?ID:2有2个输入值,ID:6有5个输入值。在这种情况下,您的查询将失败。@kiki47-我不明白您的意思,但无论如何,OP中甚至没有具体说明。我在帖子中说“对于特殊情况,可以做一些改进”,我认为最好保持查询尽可能简单,只有在必要时才进行更改。我认为代码应该是可靠的,并且应该能够接受不同的条件。sébastien Sevrin-查询不可靠,如果输入值更改,它将失败!!再见,巴斯蒂安·塞夫林-如果ID的“输入”值的数量不同怎么办?ID:2有2个输入值,ID:6有5个输入值。在这种情况下,您的查询将失败。@kiki47-我不明白您的意思,但无论如何,OP中甚至没有具体说明。我在帖子中说“对于特殊情况,可以做一些改进”,我认为最好保持查询尽可能简单,只有在必要时才进行更改。我认为代码应该是可靠的,并且应该能够接受不同的条件。sébastien Sevrin-查询不可靠,如果输入值更改,它将失败!!再见