2017-12-02 8 views
1

私の目標は、これを変換することです:列に行をSQL​​トランスフォーム

TABLE1:

ID Day Status 
101 1 N 
101 2 P 
101 3 N 
101 4 P 
101 5 R 
102 1 P 
102 2 P 
102 3 R 
102 4 R 
102 5 R 
103 2 N 
103 3 N 
103 4 P 
103 5 P 
104 3 P 
104 4 P 
104 5 R 
105 4 N 
105 5 N 

この中に、:

表2:

ID 1 2 3 4 5 
101 N P N P R 
102 P P R R R 
103  N N P P 
104   P P R 
105    N N 

このことは可能ですか?

答えて

0

アクセスでは、あなたが使用できます。

TRANSFORM First([Status]) AS Status 
SELECT [ID] 
FROM Table1 
GROUP BY [ID] 
PIVOT [Day]; 
1

あなたの「日」は、限定された範囲(1..7?)であれば、はい、それは少し退屈なんとかです:

SELECT Id, MAX(CASE Day WHEN 1 THEN Status END) AS "1" 
     , MAX(CASE Day WHEN 2 THEN Statue END) AS "2" 
FROM Table GROUP BY Id ORDER BY Id 

CASEは、各列にステータスまたはNULLを返します。 MAX()はその行を1行に縮小します。

0

私は、ピボットテーブル機能を使用してニーズを満たすことができると思います。 これが役立つことを願っています。

SELECT * 

FROM 
(SELECT ID, status, day 
    FROM yourtable) AS SourceTable 
PIVOT 
(
max(status) 
FOR day IN (1,2,3,4,5) 
) AS PivotTable; 
関連する問題