使用SQL Case函数生成列

时间:2017-11-10 22:53:05

标签: mysql

让我们说例如我有一个看起来像这样的表。

-----------------------------
| ID | Name | OID | Changed | 
-----------------------------
| 01 | John |  01 |    N    | 
-----------------------------
| 02 | John |  01 |    Y    | 
-----------------------------
| 03 | Tena |  03 |    N    | 
-----------------------------

上表显示了4列(“ID”,“名称”,“OID”和“已更改”)。

我希望生成另一个名为“Original”的列。 如果不同行的“已更改”为“Y”,则生成“Y”作为该行的值,从该行获取“OID”值以使“ID”新列值等于“ Y”。像这样的东西

----------------------------------------
| ID | Name | OID | Changed | Original |
----------------------------------------
| 01 | John |  01 |    N    |    Y     |
----------------------------------------
| 02 | John |  01 |    Y    |   null   |
----------------------------------------
| 03 | Tena |  03 |    N    |   null   |   
----------------------------------------

我尝试了一些但是无法使其工作,我认为使用Case功能可能会使它工作但不太确定如何。

请让我知道你的想法,谢谢。

1 个答案:

答案 0 :(得分:0)

加入桌子:

SELECT t1.*, t2.Changed AS Original
FROM yourTable AS t1
LEFT JOIN yourTable AS t2 ON t1.OID = t2.OID AND t1.ID != t2.ID AND t2.Changed = 'Y'

使用LEFT JOIN表示如果加入的列不存在,我们将获得NULL

DEMO