2017-11-10 4 views
0

たとえば、次のような表があります。SQL Case関数を使用して列を生成する

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

上記の表は、4列( "ID"、 "名前"、 "OID" と "変更")を示しています。

「オリジナル」と呼ばれる別の列を生成する必要があります。 異なる行の「変更」が「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 | 
---------------------------------------- 

ような何かが、私はいくつかのことを試してみましたが、それを動作させることができなかったと私はそれが動作しますが、どのようにあまりにもわからないになるかもしれないケース機能を使用してだと思います。

あなたのご意見をお聞かせください、ありがとうございます。

+0

あなたは自分自身で 'CASE'、ちょうど' LEFT JOIN'テーブルは必要ありません。 – Barmar

+0

@Barmar新しい列はどのように生成されますか? – mSrsF

+0

選択クエリが必要ですか、またはテーブルを更新していますか? – varubi

答えて

0

は、それ自体でテーブルを結合:LEFT JOINを使用して

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' 

は、それが存在しない場合、我々は結合列のためNULLを得ることができますを意味します。

DEMO

+0

ありがとう、ほんとうにありがとう。できます :) – mSrsF