我會先說,我的問題標題自己說明,這一切意味着應該是兩個選擇(或嵌套的,或w/e);但是我陷入了真正的場景,我只能使用一個選擇。真。T-SQL基於WHERE子句的結果的條件WHERE子句
的問題是相當簡單,
允許採取以下簡單的表格(接合)
T1.A T2.B T2.C
____________________
3 6 'hello'
3 NULL 'default1'
4 NULL 'default2'
5 6 'jack!'
基本上我想返回1行對於每個不同的含有甲&乙& C其中B具有兩個表中的匹配(我將在下面展開)
足夠簡單,但如果行(A)沒有匹配(B),那麼我希望該行仍然返回默認值(B = NULL )
因此,採取上表我想這樣
3 6 'hello'
4 NULL 'default2'
5 6 'jack!'
我的選擇到目前爲止的樣子,但我難倒如何得到我想要的結果:
/****** Script for SelectTopNRows command from SSMS ******/
SELECT T1.A, T2.B, T2.C
FROM [Table] T1
JOIN [Table2] T2 ON T1.D = T2.D
WHERE T1.B = T2.B OR T2.B IS NULL
顯然,現在的問題是,所有的「默認」行返回,我只希望T2.B IS NULL如果沒有T1.B要返回= T2.B
編輯
要說明,D是表2的標識。
B是一個常見列,實際上是第三個不需要的表的身份(作爲與該問題無關的其他列的標識,所以我沒有發佈他們)
對於那些想要完整的代碼,我有足夠的技巧來篩選所需要的而不是;你不想要所有表格的完整50列定義或全部sp的6個臨時表格-_-
感謝大家的幫助; Tim在關於B的評論中提出了他的問題。解決方案:簡單地添加一個備用(額外)C列,然後合併它,將B子句放入JOIN語句並使其成爲LEFT JOIN,並然後重新加入它的表2,其中它的值,所以我有:
/****** Script for SelectTopNRows command from SSMS ******/
SELECT T1.A, T2.B, COALESCE(T2.C, T3.C) AS C
FROM [Table] T1
LEFT JOIN [Table2] T2 ON T1.D = T2.D AND T1.B = T2.B
JOIN [Table2] T3 ON T1.D = T3.D AND T3.B IS NULL
這給了我我想要的結果:
3 6 'hello'
4 NULL 'default2'
5 6 'jack!'
「我被困在一個場景中,真的,我只能使用一個選擇。」 - 什麼情況?爲什麼? –
*我只是希望魔術?* - 他們停止提供這些服務:D – GurV
基本上我懷疑我可以做我想要的一個單一的選擇,但如果我不能,我將不得不廢除整個事情,所以我伸出手去詢問是否有人看到一種方法來做到這一點,我現在沒有看到它......這是500行遺留代碼場景。決定用多個選擇來做並不是一個可行的選擇。 – Spacemonkey