我正在构建一个用于ssrs参数的数据集,我在构建由case语句产生的不同值时遇到问题...我还想要一个基于结果集的逗号分隔数组...下面的小样本..
示例数据:
itemcode itemkey
1 1001
4 1002
5 1003
4 1004
7 1005
4 1006
8 1007
6 1008
5 1009
我执行以下SELECT:
SELECT DISTINCT itemcode,
,CASE WHEN itemcode IN(1,7,8) THEN 'Green'
WHEN itemcode IN(4,5) THEN 'Red'
WHEN itemcode IN(6) THEN 'Blue'
ELSE 'itemcode'
END AS 'Color'
FROM itemtable
返回:
itemcode Color
1 Green
4 Red
5 Red
6 Blue
7 Green
8 Green
我希望能够SELECT DISTINCT Color(这是case语句列),但也将项目代码放在逗号分隔值中。所以我想要这些结果(按颜色排序):
itemcode Color
6 Blue
1,7,8 Green
4,5 Red
这样我可以在ssrs参数中使用此数据集作为我的“可用值”,其中Value = itemcode和Label = Color
希望这是有道理的......如果需要,我可以澄清一下。 TIA
答案 0 :(得分:0)
注意:这是重复的帖子
SQL Server : GROUP BY clause to get comma-separated values
SQL group_concat function in SQL Server
但这是代码。
DECLARE @Items TABLE
(
itemcode int,
itemkey varchar(4)
)
INSERT INTO @Items (itemcode, itemkey)
select 1, '1001'
union select 2, '1002'
union select 1, '1001'
union select 4, '1002'
union select 5, '1003'
union select 4, '1004'
union select 7, '1005'
union select 4, '1006'
union select 8, '1007'
union select 6, '1008'
union select 5, '1009'
select * from @Items
DECLARE @ItemsGrouped TABLE
(
itemcode varchar(10),
color varchar(10)
)
insert into @ItemsGrouped
SELECT DISTINCT itemcode,
CASE WHEN itemcode IN(1,7,8) THEN 'Green'
WHEN itemcode IN(4,5) THEN 'Red'
WHEN itemcode IN(6) THEN 'Blue'
ELSE 'itemcode'
END AS 'Color'
FROM @Items
SELECT color, Email =
STUFF((SELECT ', ' + itemcode
FROM @ItemsGrouped b
WHERE b.color = a.color
FOR XML PATH('')), 1, 2, '')
FROM @ItemsGrouped a
GROUP BY color