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
以上是Select语句返回的内容。
我希望select语句每个ID返回一行,组合最后一列“Inputs”。
我目前正在使用一个非常基本的select语句,但是这个select语句返回超过5,000行时应返回不到该数字的一半。
答案 0 :(得分:0)
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
答案 1 :(得分:0)
你可以写点像
select p.[ID], p.[First Name], p.[Last Name], isnull(p.[First Name], '') + ' ' + isnull(p.[Last Name], '') [FullName]
from
(
select t.[ID], t.[NAME], t.[INPUTS]
from [dbo].[YourTable] t
) x
pivot
(
max(x.[NAME]) for x.[INPUTS] in ([First Name], [Last Name])
) p
这将处理大多数情况:
First Name
Last Name
尽管可以针对特殊情况进行一些改进