-2

行を列に転置するための最良の方法は何ですか。

表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

ありがとう

4

1 に答える 1

0

考えられるステータス値が 4 つしかないことがわかっており、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

これが標準的な方法です。目標や、潜在的なステータス値の数を事前に知っているか、存在するステータス値の列のみを表示したいかによって、より良いアプローチがあるかもしれません。これらの状況のいずれかに該当する場合は、質問を更新してください。

于 2012-06-10T19:58:23.930 に答える