如何将相同id的所有行合并为不同的列

时间:2014-12-08 05:20:08

标签: sql select group-by pivot netezza

我有一张表,客户拥有唯一ID,但每种帐户类型都有不同的日期信息。但是我想在同一行上同时获取每个客户的所有日期信息,并且我还希望将每个类型的日期显示为不同的列。

id        date        type
--       ------      -----
1        2014/10/25    a
2        2014/08/02    a
1        2014/10/07    b

但我希望将此表格作为

id       type_a      type_b
--       ------      ------
1        2014/10/25  2014/10/07
2        2014/08/02 

那么我应该如何为这种情况编写select语句呢?

2 个答案:

答案 0 :(得分:0)

试试这个:

SELECT a.id, 
       MAX(CASE WHEN a.type = 'a' THEN a.date ELSE '' END) type_a, 
       MAX(CASE WHEN a.type = 'b' THEN a.date ELSE '' END) type_b
FROM tableA a 
GROUP BY a.id;

答案 1 :(得分:-1)

检查这个......

select  id,convert(varchar(max),a ,111) as type_a,isnull(convert(varchar(max),b ,111),'') 

as type_b from tableName pivot (max(date1) for type1 in (a,b)) As pvt

你可以用动态旋转来做同样的事情

DECLARE @cols AS NVARCHAR(MAX);
DECLARE @query AS NVARCHAR(MAX);

select @cols = STUFF((SELECT distinct ',' +
                        QUOTENAME(type1)
                      FROM tableName 
                      FOR XML PATH(''), TYPE
                     ).value('.', 'NVARCHAR(MAX)') 
                        , 1, 1, '');
                        print @cols

SELECT @query =

'SELECT  *
FROM
(
  SELECT
   t.id,
   t.date1,
  t.type1
  FROM tableName AS t

) AS t
PIVOT 
(
  MAX(date1) 
  FOR type1 IN( ' + @cols + ' )' +
' ) AS p ; ' ;  

  execute(@query);