SQL Server:从左联接返回一个匹配项(使用month()函数)
我试图根据多个条件将两个表连接在一起:策略编号、事务类型、日期年份、日期月份 大多数策略都可以与此代码配合使用,但也有一些策略将具有多行数据,这些数据将满足联接条件,因此会为select语句返回重复的行 没有最好的方法来选择返回哪一个匹配(最早的日期、第一个匹配等),所以我只关心代码只返回一行数据(没有重复) 非常感谢您的任何建议/帮助SQL Server:从左联接返回一个匹配项(使用month()函数),sql,sql-server,join,Sql,Sql Server,Join,我试图根据多个条件将两个表连接在一起:策略编号、事务类型、日期年份、日期月份 大多数策略都可以与此代码配合使用,但也有一些策略将具有多行数据,这些数据将满足联接条件,因此会为select语句返回重复的行 没有最好的方法来选择返回哪一个匹配(最早的日期、第一个匹配等),所以我只关心代码只返回一行数据(没有重复) 非常感谢您的任何建议/帮助 select a.POLICY_NUMBER, a.POLICY_TRANSACTION_TYPE, a.POLICY_START_DATE, b.COMMIS
select
a.POLICY_NUMBER,
a.POLICY_TRANSACTION_TYPE,
a.POLICY_START_DATE,
b.COMMISSION_RATE,
from Table_1 as a
left join Table_2 as b
on
a.POLICY_NUMBER = b.POLICY_NUMBER
and a.POLICY_TRANSACTION_TYPE = b.TRANSACTION_TYPE
and year(a.POLICY_START_DATE) = year(b.EFFECTIVE_DATE)
and month(a.POLICY_START_DATE) = month(b.EFFECTIVE_DATE)
编辑
样本表1
POLICY_NUMBER POLICY_TRANSACTION_TYPE POLICY_YEAR_START_DATE
1 REN 1/1/2016
1 MTA 15/1/2016
样本表2
POLICY_NUMBER TRANSACTION_TYPE EFFECTIVE_DATE COMMISSION_RATE
1 REN 1/1/2016 0.3
1 MTA 14/1/2016 0.1
1 MTA 16/1/2016 -0.1
所以原始代码会返回这个
POLICY_NUMBER POLICY_TRANSACTION_TYPE POLICY_YEAR_START_DATE COMMISSION_RATE
1 REN 1/1/2016 0.3
1 MTA 15/1/2016 0.1
1 MTA 15/1/2016 -0.1
我只想返回MTA的其中一行,不管是0.1佣金率还是-0.1佣金率,我不介意。你的问题有点模糊,没有样本数据和结果。让我假设重复项来自
表2
。您可以使用行数()
任意选择一个:
你的问题有点模糊,没有样本数据和结果。让我假设重复项来自
表2
。您可以使用行数()
任意选择一个:
用你正在使用的数据库标记你的问题。可能一个distinct将删除重复项?用你正在使用的数据库标记你的问题。可能一个distinct将删除重复项?
from Table_1 a left join
(select b.*,
row_number() over (partition by POLICY_NUMBER, TRANSACTION_TYPE, year(EFFECTIVE_DATE), month(EFFECTIVE_DATE)
order by TRANSACTION_TYPE -- this will be an arbitrary ordering
) as seqnum
from Table_2 b
) b
on a.POLICY_NUMBER = b.POLICY_NUMBER and
a.POLICY_TRANSACTION_TYPE = b.TRANSACTION_TYPE and
year(a.POLICY_START_DATE) = year(b.EFFECTIVE_DATE) and
month(a.POLICY_START_DATE) = month(b.EFFECTIVE_DATE)
select a.POLICY_NUMBER,
a.POLICY_TRANSACTION_TYPE,
a.POLICY_START_DATE,
MAX(b.COMMISSION_RATE)
from Table_1 as a
left join Table_2 as b
on a.POLICY_NUMBER = b.POLICY_NUMBER and
a.POLICY_TRANSACTION_TYPE = b.TRANSACTION_TYPE and
year(a.POLICY_START_DATE) = year(b.EFFECTIVE_DATE) and
month(a.POLICY_START_DATE) = month(b.EFFECTIVE_DATE)
group by a.POLICY_NUMBER,
a.POLICY_TRANSACTION_TYPE,
a.POLICY_START_DATE