作者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://webptt.com/cn.aspx?n=bbs/Database/M.1402392236.A.E94.html
1F:→ konkonchou:on A.A1=B.B1 and isnull(A2, A1)=B2 06/10 21:24
2F:推 scpisces:case要这样下 06/10 21:42
3F:→ scpisces:(case when A.Acolumn2 ='' then A.Acolumn1 06/10 21:42
4F:→ scpisces: else A.Acolumn2 end)=B.Bcolumn2 06/10 21:42
5F:→ scpisces:on後面上述语法 06/10 21:43
6F:推 scpisces:isnull(A.Acolumn2 ,A.Acolumn1) 这样下是没用的 06/10 21:47
7F:→ scpisces:值是空白,不是NULL 06/10 21:47
8F:→ 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