SQL将行转换为列

时间:2017-12-02 00:24:57

标签: sql ms-access rows col

我的目标是改变这个:

表1:

Twitter > Streaming Framework > HDFS 
              ..       > Other DB
              ...      > Spark

进入这个:

表2:

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

这可能吗?

3 个答案:

答案 0 :(得分: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在每列中返回Status或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;

答案 2 :(得分:0)

Access 中,您可以使用:

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