基于列值的多个条件条件连接表

问题描述 投票:0回答: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 a.Month = b.Month
   and a.Day = b.Day

但是,在某些情况下,表 B 中可能缺少月份和/或日期,我试图找到一种仅连接可用值的方法(例如,仅连接名称和年份,当月份和日期为空或空白时)。我认为 case-when 方法可能是最佳的,但是,当我尝试以下方法时,我得到“'='附近的语法不正确”和“'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

我应该注意,当月份或日期为空/空白时,我不想排除记录,但在这种情况下我的加入信心只会降低。有什么建议么?我不确定我错过了什么或如何更好地处理。

sql sql-server join left-join
1个回答
0
投票
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);
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.