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];
我的目标是改造这个:
表 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];