2017-01-26 13 views
2

私は何時間も作業していますが、非常に単純なクエリであると思われるものが私を(かなり)狂ったように運転しています。一致ヴァールありますとき、私は特定の時間がすべき、非常に単純なSQLクエリのように助けが必要です

Code      Var  Time 
AAI85CLASS2000    9005N 19,68 
AAI85CLASS2000    9005P 8,68 

を取得したいのですが

アイテム

Code Var 
AAI85CLASS2000    9005N 
AAI85CLASS2000    9005P 

タイムズ

Code   Var  Time 
AAI85CLASS2000 NULL 8,68 
AAI85CLASS2000 CROM 9,68 
AAI85CLASS2000 9005N 19,68 

結果: 私は2つのテーブルを持っています考慮されます。一致するVarがない場合、汎用Time(VarがNULLの場合)を考慮する必要があります。 私は助けを求める。ありがとう。

+0

「INNER JOIN」を簡単に行うとどうなりますか? 「時間を考慮する」とはどういう意味ですか? *どのように考慮すべきですか? – Dai

+0

Varマッチングがない場合、VarがNULLに等しい時間が返されます。 – user3293444

答えて

0

はここOuter Join

SELECT a.Code, 
     a.Var, 
     COALESCE(b.time, c.time) 
FROM Items a 
     LEFT JOIN Times b 
       ON a.Code = b.Code 
       AND a.Var = b.Var 
     LEFT JOIN Times c 
       ON (a.Code = b.Code 
        AND a.Var = c.Var 
        AND b.Var IS NULL) -- To find the non matching var's in previous join 
        OR c.Var IS NULL -- To find the time from var which is NULL 
+0

ありがとうございます、私が得た結果は、Varが9005Pに等しいレコード上のNULL時間です。私が探している結果は、8,68に等しいTimeを返します。 – user3293444

+0

@ user3293444 - ケースではないデモを確認しましたか? –

+0

私はコードをテストし、Varが9005PのNULL Time値を返します。 「それはそうではない」とはどういう意味ですか? – user3293444

0

これを試してみてください:ここで

Select i.code, i.var, case when max(t.var) is not null then max(case when t.var is not null then t.time end) else max(t.time) end time 
From items i left join times t 
On i.code = t.code and (i.var = t.var or t.var is null) 
Group by i.code, i.var; 
+0

ありがとうございます、私が得た結果は、Varが9005Pに等しいレコード上のNULL時間です。私が探している結果は、8,68に等しいTimeを返します。 – user3293444

+0

私はこのコードをテストし、期待どおりの正確な出力を生成します。 – GurV

+0

私はコードを実行すると、私は得る... AAI85CLASS2000 \t 9005N \t 19,68 AAI85CLASS2000 \t 9005P \t NULL。 19,68はOKですがNULLはありません。 NULLを8,68にする必要があります。あなたは8,68かかりますか? – user3293444

0

を使用して一つの方法ですが、それを行うための一つの方法である:

SELECT I.Code, 
     I.Var, 
     ISNULL(T.Time, (SELECT Time FROM Times WHERE Var IS NULL AND Code = I.Code)) Time 
FROM Items I 
LEFT JOIN Times T ON I.Code = T.Code AND I.Var = T.Var 
+0

ありがとうございます、私が得た結果は、Varが9005Pに等しいレコード上のNULL時間です。私が探している結果は、8,68に等しいTimeを返します。 – user3293444