我在如何设置这个动态条件select语句方面遇到了一些困难。
我已经将其简化为以下基本前提:
我有两个表,表1是Cars
Id Serial Size
1 x99 M
2 x99 L
3 z50 M
4 x99 S表二是一个CodeAssignment表:
Id Serial Size Code
1 x99 L 5000
2 x99 NULL 3000
3 z50 NULL 60我正在尝试获取一条语句,该语句将拉出以下内容:
Id Serial Size Code
1 x99 M 3000
2 x99 L 5000
3 z50 M 60
4 x99 S 3000其中代码是默认拉取的(例如,CodeAssignment上的Size为NULL ),除非有指定的大小,否则应优先使用该大小。
如果我这样做了
select * from Test..Cars c
left join Test..CodeAssignment a on c.Serial = a.Serial and c.Size = a.Size我得到了正确的Code,但只针对在CodeAssignment表中具有Size条目的条目。
我尝试用一个c.Size为空的联合来附加它,但它返回了L x99汽车的两个赋值...
我曾尝试使用CASE WHEN,但我认为这只可能与硬编码的值一起使用,我的问题是,这应该从第二个表中有条件地拉出,并且将有多个条件列来测试。
有没有可能使用当前的设置,或者我如何设置表来完成这类事情?
发布于 2020-05-18 21:16:31
您可以使用两个left join:
select c.*, coalesce(ca.code, cad.code) as code
from cars c left join
codeassignment ca
on ca.serial = c.serial and ca.size = c.size left join
codeassignment cad
on cad.serial = c.serial and cad.size is null and ca.size is null;Here是一个db<>fiddle。
第一个left join用于精确匹配。第二个是如果第一个不匹配,则为默认值。
https://stackoverflow.com/questions/61870306
复制相似问题