2016-04-22 14 views
0

私はdate2列を作成したいと思うデータセットを持っています、各IDのdate1値を1900-01-01以外の値に置き換えてください。私はこれが複数のクエリで実行できることは知っていますが、最初の3つのカラムを生成したのと同じクエリで行いたいと思います。これは実行可能ですか?レコードの値を1つのSQLクエリで別の値に置き換えます

ID Col2 Date1  Date2 
A 123  2015-01-10 2015-01-10 
A 223  1900-01-01 2015-01-10 
A 387  1900-01-01 2015-01-10 
B 257  2016-03-04 2016-03-04  
B 682  1900-01-01 2016-03-04 
B 916  1900-01-01 2016-03-04 

ありがとう!

+0

希望の結果が示された場合、この疑問がわかりやすくなる可能性があります。 – jpheldson

答えて

0

サブセレクトとケースでこれを行うことができます。

SQL Fiddle Demo

SELECT 
    id, 
    col2, 
    date1, 
    CASE WHEN date1 = '1900-01-01' THEN (SELECT MAX(date1) FROM YourTable yt2 WHERE yt2.id = yt1.id) ELSE date1 END AS date2 
FROM YourTable yt1 
0

次のクエリを試すことができます。

SELECT 
    T1.*, 
    CASE 
    WHEN T1.date1 = '1900-01-01' 
    THEN T2.date1 
    ELSE T1.date1  
    END AS date2 
FROM 
tbl T1 
LEFT JOIN 
(
    SELECT 
    MAX(date1) date1, id 
    FROM tbl 
    GROUP BY id 
)T2 
ON T1.ID=T2.ID 

T2における内部クエリが一度だけ評価されることに注意してください。

関連する問題