从原始SELECT中排除辅助ID记录



我对SQL相对陌生,在试图解决这个问题时遇到了很多问题。我尝试过使用LEFT JOIN,并尝试过使用函数来实现这一点,但都无济于事。

对于每个UserID,如果有NULL值,我需要从SELECT中删除该UserID的产品ID的所有记录。

我使用的是SQL Server 2014。

示例表

+--------------+-------------+---------------+|UserID|ProductID|DateTermed|+--------------+-------------+---------------+|578|2|2017年7月1日||578|2|2017年7月1日||578 | 1 | 2017年1月15日||578|1|NULL||649|1 | 2017年9月1日||649 | 2 | 2017年11月1日|+--------------+-------------+---------------+

所需输出

+--------------+-------------+---------------+|UserID|ProductID|DateTermed|+--------------+-------------+---------------+|578|2|2017年7月1日||578|2|2017年7月1日||649|1 | 2017年9月1日||649 | 2 | 2017年11月1日|+--------------+-------------+---------------+

尝试以下操作:

SELECT a.userid, a.productid, a.datetermed 
FROM yourtable a
LEFT OUTER JOIN (SELECT userid, productid, datetermed FROM yourtable WHERE 
datetermed is null) b
on a.userid = b.userid and a.productid = b.productid
WHERE b.userid is not null

这将使日期为null的所有记录与相应的UserIDProductIDserIDProductIDull日期的记录。

您可以使用此WHERE条件:

SELECT 
UserID,ProducID,DateTermed
FROM
[YourTableName]
WHERE
(CONVERT(VARCHAR,UserId)+ 
CONVERT(VARCHAR,ProductID) NOT IN (    
select CONVERT(VARCHAR,UserId)+ CONVERT(VARCHAR,ProductID) 
from 
[YourTableName]
where DateTermed is null)
)

当您连接UserIdProductIdateTermed字段中具有null值的"对"。

希望得到帮助。

最新更新