【问题标题】:How do I pivot in SQL [duplicate]我如何在 SQL 中进行透视 [重复]
【发布时间】:2019-07-03 17:26:05
【问题描述】:

我有一张表,我正在尝试旋转。我能够部分实现我想要的。我需要帮助来完成它

我的基表

+-------------+----------+-------------+
| WorkOrderID | STEP_NBR | STEP_STATUS |
+-------------+----------+-------------+
| AA100       |        0 | C           |
| AA100       |        1 | W           |
| AA100       |        2 | W           |
| AA200       |        0 | W           |
| AA200       |        1 | W           |
| AA300       |        0 | C           |
| AA300       |        1 | C           |
+-------------+----------+-------------+

我想要的输出

+-------------+--------+--------+--------+
| WorkOrderID | Step_0 | Step_1 | Step_2 |
+-------------+--------+--------+--------+
| AA100       | C      | W      | W      |
| AA200       | W      | W      |        |
| AA300       | C      | C      |        |
+-------------+--------+--------+--------+

我得到的输出

+-------------+--------+--------+--------+
| WorkOrderID | Step_0 | Step_1 | Step_2 |
+-------------+--------+--------+--------+
| AA100       | C      | null   | null   |
| AA100       | null   | W      | null   |
| AA100       | null   | null   | W      |
| AA200       | W      | null   | null   |
| AA200       | null   | W      | null   |
| AA300       | C      | null   | null   |
| AA300       | null   | C      | null   |
+-------------+--------+--------+--------+

我的查询

SELECT WorkOrderID, 
(CASE WHEN STEP_NBR = 0 THEN STEP_STATUS ELSE NULL END) AS Step_0,
(CASE WHEN STEP_NBR = 1 THEN STEP_STATUS ELSE NULL END) AS Step_1,
(CASE WHEN STEP_NBR = 2 THEN STEP_STATUS ELSE NULL END) AS Step_2
FROM Table1

如何摆脱多个 WorkOrderId。我只想要每个 WorkOrderId 1 行

db-fiddle

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    你只需要聚合:

    SELECT WorkOrderID, 
           MAX(CASE WHEN STEP_NBR = 0 THEN STEP_STATUS END) AS Step_0,
           MAX(CASE WHEN STEP_NBR = 1 THEN STEP_STATUS END) AS Step_1,
           MAX(CASE WHEN STEP_NBR = 2 THEN STEP_STATUS END) AS Step_2
    FROM Table1
    GROUP BY WorkOrderID;
    

    ELSE NULL 是多余的,所以我删除了它。

    【讨论】:

    • 谢谢!你能解释一下MAX在这种情况下是如何工作的吗
    • GROUP BYWorkOrderId 生成一行。 MAX() 正在选择一个匹配每个条件的值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 2021-03-10
    • 2020-05-26
    • 2011-12-28
    • 1970-01-01
    • 2011-05-10
    相关资源
    最近更新 更多