希望有人可以帮助解决这个问题
我的表格如下所示
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
请注意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
一如既往地谢谢大家
答案 0 :(得分:7)
这样的东西?
DISTINCT
以避免出现3 & 4 & 4
DECLARE @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;
结果
+----+------+-----+---------+----------+--------------------+
| 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 |
+----+------+-----+---------+----------+--------------------+
如果您要添加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;
答案 1 :(得分:0)
答案 2 :(得分:0)
试试这个
console.log(event.currentTarget.id);
答案 3 :(得分:0)
请试试这个---
注意 - 使用CHARINDEX在末尾添加“仅”文字。
;WITH CTE1 AS
(
select 33 id , 'Pam' Name , 34 Age , 334 GroupBy , 3 Services
union all
select 33 , 'Pam' , 34 , 334 , 4
union all
select 43 , 'Lily' , 56 , 10 , 3
union all
select 67 , 'Bob' , 22 , 11 , 4
)
,CTE2 AS
(
SELECT * ,
STUFF
((
SELECT CONCAT(' & ' , Services ) Services
FROM CTE1 a
WHERE ( a.id = b.id )
FOR XML PATH(''),Type
).value('.','VARCHAR(MAX)') ,1,2,'')
AS SG
FROM CTE1 b
)
SELECT Id,Name,Age,GroupBy,Services , CASE WHEN CHARINDEX('&',SG,0) = 0 THEN CONCAT(SG,' Only') ELSE SG END SG
FROM CTE2
<强>输出强>
Id Name Age GroupBy 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
(4 rows affected)
答案 4 :(得分:0)
如果您正在使用MS SQL2017,那么这个应该可以解决问题:
WITH A AS
(
SELECT
ID, Name, Age, GroupID,
STRING_AGG (Services, ' & ')
FROM yourtable
GROUP BY ID, Name, Age, GroupID
)
SELECT DISTINCT
A.ID, A.Name, A.Age, B.Services,
CASE
WHEN LEN(A.SG) = 1 THEN A.SG + ' Only'
ELSE A.SG
END AS SG
FROM yourtable AS B
LEFT JOIN A
ON A.ID = B.ID