我正在尝试以下select语句,包括来自4个表的列。但是结果将每行返回4次,我确定这是因为我有多个左联接,但是我尝试了其他联接却无法获得所需的结果。
select table1.empid,table2.name,table2.datefrom, table2.UserDefNumber1, table3.UserDefNumber1, table4.UserDefChar6
from table1
inner join table2
on table2.empid=table1.empid
inner join table3
on table3.empid=table1.empid
inner join table4
on table4.empid=table1.empid
where MONTH(table2.datefrom) = Month (Getdate())
我需要它来返回没有重复的数据,因此每个条目只有1行。
我还希望最后的“ where Month”子句着眼于上个月而不是当前月份,但也要努力解决这一问题。
我对此有些陌生,所以我希望这是有道理的。
谢谢
如果每列上重复的行相同,则可以使用DISTINCT
关键字消除这些重复。
但是我认为您应该重新考虑您的JOIN
orWHERE
子句,因为这些重复项必须有一个理由:
您可能希望通过WHERE / JOIN(而不是DISTINCT
关键字)中的条件排除那些重复的行,因为当某些数据在原始结果集的单行中更改时,可能会发生意外行为。然后,您再次开始具有重复的Empid。
您可以通过以下子句检查日期是否在上个月:
date BETWEEN dateadd(mm, -1, datefromparts(year(getdate()), month(getdate()), 1))
AND datefromparts(year(getdate()), month(getdate()), 1)
此语句用于DATEFROMPARTS
两次创建当前月份的开始,通过使用从第一个月份中减去一个月DATEADD
(上个月初的结果),然后使用来检查是否date
在这些日期之间BETWEEN
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句