【发布时间】:2019-07-02 16:06:20
【问题描述】:
我有什么:表
_______________________________________
| MachUUID | State| Pass | Fail |
|--------------------------------------
| 1234 | A | 0.2 | 0.98 |
| 1234 | B | 0.5 | 0.5 |
| 1234 | C | 0.8 | 0.2 |
---------------------------------------
我想要什么:transformed_table
| MachUUID | A_Pass | A_Fail | B_Pass | B_Fail | C_Pass | C_Fail
--------------------------------------------------------------
| 1234 | 0.2 | 0.98 | 0.5 | 0.5 | 0.8 | 0.2
状态数(A、B 等是固定的)。目前,它们最多有 20 个。所以要改造这个
我在做什么:
Transformed_Table AS (
SELECT MachUUID, Pass AS A_Pass, Fail AS A_Fail
FROM table
WHERE State = 'A'
UNION ALL
SELECT MachUUID, Pass AS B_Pass, Fail AS B_Fail
FROM table
WHERE State = 'B'
UNION ALL
SELECT MachUUID, Pass AS C_Pass, Fail AS C_Fail
FROM table
WHERE State = 'C')
但是,这会返回一个奇怪的联合,看起来像:
我得到错误的输出
| MachUUID | A_Pass| A_Fail |
| 1234 | 0.2 | 0.98 |
| 1234 | 0.5 | 0.5 |
| 1234 | 0.8 | 0.2 |
问题
我认为我对联合的理解在这一点上是不正确的。我了解外连接,并且想知道这是否是一种更好的方法。
我愿意接受其他解决此问题的方法的建议
【问题讨论】:
-
常见的数据透视技术使用 GROUP BY 和条件聚合:modern-sql.com/use-case/pivot
-
@MarkusWinand 链接方法的问题是,我必须使用像
CASE state = 'A' then Pass End As A_PassCASE state = 'A' then Fail End As A_Fail这样的 case 语句。我不确定如果我有 2 个案例语句评估完全相同的案例,它们都会被执行