Tsql 根据同一表中的分组选择行

Tsql 根据同一表中的分组选择行,tsql,Tsql,很抱歉这个蹩脚的标题。。。如果我能用几句话来总结这一点,我可能会更幸运地在这里找到一个现有的解决方案 我有一张简化的表格,如下所示: ID PRODUCT ___ _________ 100 Savings 200 Mortgage 200 Visa 300 Mortgage 300 Savings 我需要根据每个ID的乘积选择行。例如,我可以这样做: SELECT DISTINCT ID FROM tab

很抱歉这个蹩脚的标题。。。如果我能用几句话来总结这一点,我可能会更幸运地在这里找到一个现有的解决方案

我有一张简化的表格,如下所示:

ID       PRODUCT
___      _________
100      Savings  
200      Mortgage  
200      Visa  
300      Mortgage  
300      Savings
我需要根据每个ID的乘积选择行。例如,我可以这样做:

SELECT DISTINCT ID
FROM table1
WHERE Product NOT IN ('Savings', 'Chequing')
这将返回:

ID
___
200
300
然而,在身份证300的情况下,他们确实有存款,所以我实际上不想退还。我想用通俗易懂的英语说

从表1中选择*,其中“Savings”和“Chequing”不是具有该ID的任何行的产品

在这种情况下,期望的结果是ID为200的一行,因为它们没有储蓄或支票


如何执行此操作?

选择与您不希望匹配的项目匹配的行,然后比较它们的ID

e、 g


您可以使用
不存在

SELECT DISTINCT t1.ID
FROM dbo.Table1 t1
WHERE NOT EXISTS
(
    SELECT 1 FROM dbo.Table1 t2
    WHERE t2.Poduct IN ('Savings', 'Chequing')
    AND t2.ID = t1.ID
)


值得一读:

努力舔了舔魔咒。很好的简单逻辑。谢谢。我认为,如果产品为null,那么可以为null不是问题,但是id可以为null,但是使id为null是列名的一个非常糟糕的用法。SQL server在空值上是可靠的,它们从不等于任何值。我假设不为空,因为这是做任何事情的明智方法。如果列为空,我假设您提到了它
SELECT DISTINCT t1.ID
FROM dbo.Table1 t1
WHERE NOT EXISTS
(
    SELECT 1 FROM dbo.Table1 t2
    WHERE t2.Poduct IN ('Savings', 'Chequing')
    AND t2.ID = t1.ID
)