将行转置为列的最佳方法是什么。
TABLE_1
Cust_id field1 field2 ...
------- ------ ------
TABLE_2
Cust_id status date_changed
------- ------ ------------
查看/表格输出
Cust_id status1 status2 status3 status4
------- ----------- ------------- ----------- -----------
1 01-jan-2011 05-April-2011 06-Dec-2012 30-Dec-2012
由于
答案 0 :(得分:0)
假设您知道只有四种可能的状态值,并且您希望任何cust_id / status组合的最新日期:
DECLARE @table_2 TABLE(Cust_id INT, status INT, date_changed DATE);
INSERT @table_2 VALUES
(1,1,SYSDATETIME()),
(2,1,SYSDATETIME()),
(3,1,DATEADD(DAY, 1, SYSDATETIME())),
(3,1,SYSDATETIME()),
(1,2,SYSDATETIME());
SELECT cust_id,
status1 = [1], status2 = [2],
status3 = [3], status4 = [4]
FROM
(
SELECT cust_id, status, date_changed
FROM @table_2
) AS t
PIVOT (MAX(date_changed)
FOR [status] IN ([1],[2],[3],[4])) AS p
ORDER BY cust_id;
结果:
cust_id status1 status2 status3 status4
------- ---------- ---------- ------- -------
1 2012-06-10 2012-06-10 NULL NULL
2 2012-06-10 NULL NULL NULL
3 2012-06-11 NULL NULL NULL
这是执行此操作的标准方法。可能有更好的方法取决于您的目标和/或您是否事先知道潜在状态值的数量,或者只想显示存在的状态值的列。如果有任何这种情况适用,请更新问题。