Jes*_*766 2 sql t-sql sql-server string-concatenation
希望有人可以帮助解决这个问题
我有一张如下所示的表格
ID | Name | Age | GroupID | Services
33 | Pam | 34 | 334 | 3
33 | Pam | 34 | 334 | 4
43 | Lily | 56 | 10 | 3
67 | Bob | 22 | 11 | 4
Run Code Online (Sandbox Code Playgroud)
请注意Pam有2行,因为她有2种不同类型的服务.
我将如何编写一个案例陈述,该陈述将显示"名称"列中的人是否具有服务3,服务4或两者.
例如,查询上面的输出就是
ID | Name | Age | GroupID | Services | SG
33 | Pam | 34 | 334 | 3 | 3 & 4
33 | Pam | 34 | 334 | 4 | 3 & 4
43 | Lily | 56 | 10 | 3 | 3 Only
67 | Bob | 22 | 11 | 4 | 4 Only
Run Code Online (Sandbox Code Playgroud)
一如既往地谢谢大家
像这样的东西?
DISTINCT以避免案例3 & 4 & 4DECLARE @mockupTable TABLE(ID INT,Name VARCHAR(100),Age INT, GroupID INT,[Services] INT);
INSERT INTO @mockupTable VALUES
(33,'Pam',34,334,3)
,(33,'Pam',34,334,4)
,(43,'Lily',56,10,3)
,(67,'Bob',22,11,4);
SELECT t.*
,STUFF((
SELECT DISTINCT ' & ' + CAST(x.[Services] AS VARCHAR(10))
FROM @mockupTable AS x
WHERE t.ID=x.ID
ORDER BY x.[Services]
FOR XML PATH(''),TYPE
).value('.','nvarchar(max)'),1,3,'') AS SG
FROM @mockupTable AS t;
Run Code Online (Sandbox Code Playgroud)
结果
+----+------+-----+---------+----------+--------------------+
| ID | Name | Age | GroupID | Services | SG |
+----+------+-----+---------+----------+--------------------+
| 33 | Pam | 34 | 334 | 3 | 3 & 4 |
+----+------+-----+---------+----------+--------------------+
| 33 | Pam | 34 | 334 | 4 | 3 & 4 |
+----+------+-----+---------+----------+--------------------+
| 43 | Lily | 56 | 10 | 3 | 3 |
+----+------+-----+---------+----------+--------------------+
| 67 | Bob | 22 | 11 | 4 | 4 |
+----+------+-----+---------+----------+--------------------+
Run Code Online (Sandbox Code Playgroud)
如果要添加以下内容,则为查询only:
SELECT t.*
,STUFF((
SELECT DISTINCT ' & ' + CAST(x.[Services] AS VARCHAR(10))
FROM @mockupTable AS x
WHERE t.ID=x.ID
ORDER BY x.[Services]
FOR XML PATH(''),TYPE
).value('.','nvarchar(max)'),1,3,'')
+ CASE WHEN COUNT(*) OVER(PARTITION BY ID) = 1 THEN ' Only' ELSE '' END AS SG
FROM @mockupTable AS t;
Run Code Online (Sandbox Code Playgroud)