1

だから私は自分がこのようなことをしていることに気づきました:

SELECT
    Foo = 
    CASE
        WHEN a.Foo IS NULL THEN (SELECT x.Foo FROM x WHERE x.Id = a.Id)
        ELSE a.Foo
    END,
    Bar =
    CASE
        WHEN a.Bar IS NULL THEN (SELECT x.Bar FROM x WHERE x.Id = a.Id)
        ELSE a.Bar
    END,
    Alice = 
    CASE
        WHEN a.Alice IS NULL THEN (SELECT x.Alice FROM x WHERE x.Id = a.Id)
        ELSE a.Alice
    END
FROM a INNER JOIN b ON a.X = b.X

それはきれいに見えません。したがって、次のような一時変数を作成する方法があるかどうか疑問に思っています。

WITH Temp AS SELECT * FROM x WHERE x.Id = a.Id

の範囲内でSELECTそれを参照しますか?

4

3 に答える 3

2

試す

SELECT 
       Foo   = COALESCE(a.Foo, x.Foo),
       Bar   = COALESCE(a.Foo, x.Foo),
       Alice = COALESCE(a.Alice, x.Alice)
  FROM a JOIN 
       b ON a.X = b.X LEFT JOIN
       x ON x.Id = a.Id

また

SELECT 
       COALESCE(a.Foo, x.Foo) Foo,
       COALESCE(a.Foo, x.Foo) Bar,
       COALESCE(a.Alice, x.Alice) Alice
  FROM a JOIN 
       b ON a.X = b.X LEFT JOIN
       x ON x.Id = a.Id
于 2013-05-06T05:07:40.413 に答える
1

join の使い方

SELECT  COALESCE(a.Foo, x.Foo) Foo,
        COALESCE(a.Bar, x.Bar) Bar,
        COALESCE(a.Alice, x.Alice) Alice
FROM    a 
        INNER JOIN b ON a.X = b.X
        LEFT JOIN x ON a.ID = x.ID
于 2013-05-06T05:05:38.663 に答える
0
SELECT  CASE WHEN a.Foo IS NULL THEN x.Foo ELSE a.Foo End as Foo,
        CASE WHEN a.Bar IS NULL THEN x.Bar ELSE a.Bar End  as Bar,
        CASE WHEN a.Alice IS NULL THEN x.Alice ELSE a.Alice End as Alice
FROM    a 
        INNER JOIN b ON a.X = b.X
        INNER JOIN x ON a.ID = x.ID
于 2013-05-06T05:10:29.587 に答える