与case语句不同的值/逗号分隔数组

时间:2014-12-16 23:40:27

标签: sql reporting-services case

我正在构建一个用于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

1 个答案:

答案 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