选择在不同行上具有 NUMBER 1 和 2 行的 ID
Posted
技术标签:
【中文标题】选择在不同行上具有 NUMBER 1 和 2 行的 ID【英文标题】:Select ID's that have rows with NBR 1 and 2 on separate rows 【发布时间】:2019-04-03 11:29:41 【问题描述】:我希望编写 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)
如何更新以仅返回在不同行上具有这些 NBR_ID
的 VENDOR_ID
?
【问题讨论】:
【参考方案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)
【讨论】:
完美运行!谢谢! 这似乎返回了VENDOR_ID
的行,其中 NBR_ID
的行数大于 2,即如果 VENDOR_ID
有 4 个 NBR_ID
,它将返回第 1-4 行,每个在不同的行上。我怎样才能返回只有 NBR_ID
第 1 行和第 2 行的 VENDOR_ID
?
谢谢 - 有没有办法仍然像以前一样选择 GROUP_ID
和 NBR_ID
列?
太棒了,按预期工作!再次感谢您的跟进。【参考方案2】:
你可以使用聚合:
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 组成。
【讨论】:
我将NBR_ID
添加到Select
和Group By
,但它没有返回任何数据。我仍然想显示这一列,并返回两行(分别为NBR_ID
1 和NBR_ID
2)。
此外,这似乎返回了 NBR_ID 1 和 NBR_ID 2 以上的行,它还返回了 NBR_ID、3 或更多的 VENDOR_ID。理想情况下,我只想返回只有 1 和 2 的。【参考方案3】:
使用存在
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)
【讨论】:
这是不正确的,它返回每个 VENDOR_ID 的 NBR_ID 大于 2 的行(例如 3、4、5) 这仍会返回 NBR_ID 大于 2 的行的 VENDOR_ID(例如 3、4、5)。 @Nick 立即查看以上是关于选择在不同行上具有 NUMBER 1 和 2 行的 ID的主要内容,如果未能解决你的问题,请参考以下文章
pyspark:如果列在不同行中具有相同的值,则合并两行或多行
使用 RecyclerView Android Studio 在不同行上设置列