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

时间:2013-09-12 20:11:22

标签: tsql

对于蹩脚的标题感到抱歉......如果我能用几句话总结一下,我可能会在这里找到现有的解决方案更好!

我有一个简化的表格如下:

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

然而,在ID 300的情况下,他们确实有储蓄,所以我实际上不希望这返回。用简单的英语我想

从表1中选择*其中'储蓄'和' Chequing'不是具有该ID的任何行的产品。

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

我该怎么做?

2 个答案:

答案 0 :(得分:1)

选择与您不想匹配的项匹配的行,然后比较热量ID

e.g。

select distinct id from table1 where id not in (
  SELECT ID
  FROM table1
  WHERE Product IN ('Savings', 'Chequing')
)

答案 1 :(得分:0)

您可以使用NOT EXISTS

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
)

Demo

值得一读:Should I use NOT IN, OUTER APPLY, LEFT OUTER JOIN, EXCEPT, or NOT EXISTS?