让我们说例如我有一个看起来像这样的表。
-----------------------------
| 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功能可能会使它工作但不太确定如何。
请让我知道你的想法,谢谢。
答案 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
。