我有一张表,客户拥有唯一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语句呢?
答案 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);