提问人:2020db9 提问时间:11/17/2023 最后编辑:philipxy2020db9 更新时间:11/17/2023 访问量:37
基于列值的多个条件条件联接表
Join table on multiple criteria condition based on column value
问:
select
a.Name
a.Year
a.Month
a.Day
b.Price
into #test_table
from #tableA as a
left join #tableB as b on
a.Name = b.Name
and a.Year = b.Year
and a.Month = b.Month
and a.Day = b.Day
在某些情况下,表 B 中可能缺少 Month 和/或 Day,我试图找到一种方法来仅连接可用值(例如,当 Month 和 Day 为 null 或空白时,仅在 Name 和 Year 上)。我在想,一个案例-当的方法可能是最佳的;但是,当我尝试以下方法时,我得到“'='附近的语法不正确”和“'else'附近的语法不正确”
select
a.Name
a.Year
a.Month
a.Day
b.Price
into #test_table
from #tableA as a
left join #tableB as b on
case when a.Month = '' then a.Name = b.Name and a.Year = b.Year
else a.Name = b.Name and a.Year = b.Year and a.Month = b.Month and a.Day = b.Day
我不想在 Month 或 Day 为 Null/空白时排除记录。
我错过了什么?
什么是正确的?
答:
1赞
Cetin Basoz
11/17/2023
#1
select
a.Name
a.Year
a.Month
a.Day
b.Price
into #test_table
from #tableA as a
left join #tableB as b on
a.Name = b.Name and a.Year = b.Year
and (b.Month is null or a.Month = b.Month)
and (b.Day is null or a.Day = b.Day);
评论
and a.Day = ISNULL(b.Day, a.Day)
case
是一个表达式,它返回一个标量值,而不是另一个表达式。不要在连接表达式中使用不可优化的表达式,请使用标准和/或逻辑。isnull