作者bulmungtw (Lance)
看板Database
標題[SQL ] JOIN的CASE問題
時間Tue Jun 10 17:23:53 2014
(針對
SQL 語言的問題,用這個標題。請用 Ctrl+Y 砍掉這行)
資料庫名稱:MSSQL
資料庫版本:10.50.2500
內容/問題描述:
http://i.imgur.com/ScDmy9z.png
又來問問題了 艸
這次是個JOIN的問題,想將右邊的TABLE B LEFT JOIN給左邊的A
產生下面的結果
但因為A的Acolumn2有空白的,這樣怎麼ON好像都不太對…
以下是測試過的兩個錯誤結果
原本想說看用isnull可不可以讓原本空白的地方先有資料 不過亂弄一下看起來不能這樣
做
-----
select
Acolumn1,
isnull(A.Acolumn2 ,A.Acolumn1) AS Acolumn2,
Acolumn3,
Acolumn4,
Acolumn5,
from A A
left join B B on A.Acolumn2 = B.Bcolumn2
order by Acolumn1
-----
後來看到有人在left join後的條件後面弄case when 但照著弄會在
(A.Acolumn1=B.Bcolumn2)出現錯誤
-----
select
Acolumn1,
Acolumn2,
Acolumn3,
Acolumn4,
Acolumn5,
from A A
left join B B on A.Acolumn2 = B.Bcolumn2
and case when A.Acolumn2 = '' then (A.Acolumn1=B.Bcolumn2)
order by Acolumn1
-----
請問有什麼比較好的解法嗎?謝謝/
--
Sent from my HR-93.
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 219.87.137.190
※ 文章網址: http://www.ptt.cc/bbs/Database/M.1402392236.A.E94.html
→ konkonchou:on A.A1=B.B1 and isnull(A2, A1)=B2 06/10 21:24
推 scpisces:case要這樣下 06/10 21:42
→ scpisces:(case when A.Acolumn2 ='' then A.Acolumn1 06/10 21:42
→ scpisces: else A.Acolumn2 end)=B.Bcolumn2 06/10 21:42
→ scpisces:on後面上述語法 06/10 21:43
推 scpisces:isnull(A.Acolumn2 ,A.Acolumn1) 這樣下是沒用的 06/10 21:47
→ scpisces:值是空白,不是NULL 06/10 21:47
→ bulmungtw:待會來改看看 感謝兩位!! 06/11 08:56
select
Acolumn1,
Acolumn2,
Acolumn3,
Acolumn4,
Acolumn5,
from A A
left join B B on (case when A.Acolumn2 = ''
then A.Acolumn1
else A.Acolumn2
end) =B.Bcolumn2
order by Acolumn1
成功了,謝謝scpisces的指點!
※ 編輯: bulmungtw (219.87.137.190), 06/11/2014 09:46:02