选择具有NBR 1和2在单独的行中的行的ID

时间:2019-04-03 11:29:42

标签: sql sql-server sql-server-2014

我正在寻找编写SQL来返回行,其中VENDOR_ID既包含NBR_ID = 1的行又包含NBR_ID = 2的行。在下面的示例中,SQL将返回VENDOR_ID 93309A,具有NBR_ID 1的行和具有NBR_ID 2的另一行的数据。

GROUP_ID     VENDOR_ID    NBR_ID
AUX          27           1
AUX          87188A       1
AUX          92481A       1
AUX          92482A       1
AUX          92527A       1
AUX          93309A       1
AUX          93309A       2
AUX          93328A       1

我编写了以下SQL,但这并没有明确返回VENDOR_ID,其中NBR_ID为1的行和NBR_ID为2的另一行。

SELECT GROUP_ID, VENDOR_ID, NBR_ID
FROM TEST_TABLE
WHERE NBR_ID IN (1,2)

如何更新以仅返回这些VENDOR_ID位于不同行的NBR_ID

3 个答案:

答案 0 :(得分:1)

使用相关子查询

SELECT GROUP_ID,VENDOR_ID,NBR_ID
FROM TEST_TABLE a
WHERE exists(select 1 from TEST_TABLE b where a.GROUP_ID=b.group_id and 
a.VENDOR_ID=b.vendor_id and NBR_ID IN (1,2) 
having count(distinct nbr_id)=2) and NBR_ID IN (1,2) 

答案 1 :(得分:0)

您可以使用聚合:

SELECT GROUP_ID, VENDOR_ID
FROM TEST_TABLE
WHERE NBR_ID IN (1, 2)
GROUP BY GROUP_ID, VENDOR_ID
HAVING COUNT(DISTINCT NBR_ID) = 2;

由于两个原因,它不会返回NBR_ID。首先,您的问题未指定您想要的。其次,这是多余的,因为您知道列表同时包含1和2。

答案 2 :(得分:0)

使用存在

select t1.* from TEST_TABLE t1
where exists ( select 1 from TEST_TABLE t2 where t1.VENDOR_ID=t2.VENDOR_ID
                                         and t1.GROUP_ID=t2.GROUP_ID
                                      and NBR_ID in (1,2)
                                      having count(distinct NBR_ID)=2)
and NBR_ID in (1,2)