SQL 将行转换为列

SQL transform rows into columns

我的目标是改造这个:

表 1:

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

这可能吗?

如果你的"day"是一个有限的范围(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 returns Status 或 NULL。 MAX() 将其折叠成一行。

我认为,您可以使用 pivot table 函数来实现您的需要。 希望这有帮助。

SELECT *

FROM
(SELECT ID, status, day
    FROM  yourtable) AS SourceTable
PIVOT
(
max(status)
FOR day IN (1,2,3,4,5)
) AS PivotTable;

Access 中,您可以使用:

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