SQL中的数据透视表(使用Groupby)

时间:2019-05-01 20:55:30

标签: tsql

我的表格结构如下

Customer_ID Sequence    Comment_Code    Comment
1           10              0             a
1           11              1             b
1           12              1             c
1           13              1             d
2           20              0             x
2           21              1             y
3           100             0             m
3           101             1             n
3           102             1             o
1           52              0             t
1           53              1             y
1           54              1             u

序列号是表中的唯一编号

我想要下面的SQL输出

Customer_ID     Sequence    
1               abcd
2               xy
3               mno
1               tyu

有人可以帮我这个忙吗?如果需要,我可以提供更多详细信息。

enter image description here

1 个答案:

答案 0 :(得分:0)

这似乎是一个简单的差距/岛屿问题。

-- Sample Data
DECLARE @table TABLE
(
  Customer_ID  INT,
  [Sequence]   INT,
  Comment_Code INT,
  Comment      CHAR(1)
);
INSERT @table
(
    Customer_ID,
    [Sequence],
    Comment_Code,
    Comment
)
VALUES (1,10 ,0,'a'),(1,11 ,1,'b'),(1,12 ,1,'c'),(1,13 ,1,'d'),(2,20 ,0,'x'),(2,21 ,1,'y'),
       (3,100,0,'m'),(3,101,1,'n'),(3,102,1,'o'),(1,52 ,0,'t'),(1,53 ,1,'y'),(1,54 ,1,'u');


-- Solution
WITH groups AS
(
  SELECT
    t.Customer_ID, 
    Grouper = [Sequence] - DENSE_RANK() OVER (ORDER BY [Sequence]),
    t.Comment
  FROM @table AS t
)
SELECT 
  g.Customer_ID,
  [Sequence] = 
  (
    SELECT g2.Comment+''
    FROM   groups AS g2
    WHERE  g.Customer_ID = g2.Customer_ID AND g.Grouper = g2.Grouper
    FOR XML PATH('')
  )
FROM groups AS g
GROUP BY g.Customer_ID, g.Grouper;

返回:

Customer_ID Sequence
----------- ----------
1           abcd
1           tyu
2           xy
3           mno