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

时间:2017-01-30 20:29:01

标签: sql-server

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

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

我正在使用SQL Server 2014。

示例表

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

所需输出

+--------------+-------------+---------------+
| UserID       | ProductID   | DateTermed    |
+--------------+-------------+---------------+
|     578      |           2 |    1/7/2017   |
|     578      |           2 |    1/7/2017   |
|     649      |           1 |    1/9/2017   |
|     649      |           2 |    1/11/2017  |
+--------------+-------------+---------------+

2 个答案:

答案 0 :(得分:0)

您可以使用此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)
        )

当您连接 UserId 并且 ProductId 为每对获取一个唯一值时,您可以将它们用作“关键字”以排除“对”在 DateTermed 字段中使用null值。

希望得到这个帮助。

答案 1 :(得分:0)

尝试以下方法:

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 日期的记录外部联接到相应的 UserID ProductID 记录。如果您只记录在已加入的表格中没有关联的用户ID ProductID 的记录,则只能留下不具备的记录 null 日期。