sql - 根据同一表的第二列的给定值,从表的一列中查找公共(public)值(交集)

标签 sql sql-server intersection intersect

我有下表,其中指定了供应商交付产品的区域,其中三列为

ID   Supp_ID   Area_ID
1      a         P
2      a         R
3      a         T
4      a         s
.      .         .
.      .         .
5      b         R
6      b         T
7      b         V
.      .         .
.      .         .
8      c         Z
9      c         R
10     c         P
11     c         T
.      .         .
.      .         .
.      .         .

现在我想要这样一个存储过程,如果我将 Supp_IDs a,b,c 传递给 SP,它应该返回我的 Area_IDs R,T在所有 3 个供应商中共同。简而言之,我必须为给定的 Supp_ID 执行 Area_ID 的交集

目前我正在尝试的是:

select Area_ID from Table_name where Supp_ID=a
INTERSECT
select Area_ID from Table_name where Supp_ID=b
INTERSECT
select Area_ID from Table_name where Supp_ID=c

当我知道有确切的三个 Supp_ID 时,上面的代码很好 但是当存在不同数量的 Supp_ID 时,我无法找到如何在运行时使用上述逻辑。

现在我找不到我应该如何写在 SP 之上。

提前致谢。

最佳答案

select Area_ID
from Table1
where Supp_ID in ('a', 'b', 'c')
group by Area_ID
having count(distinct Supp_ID) = 3

或者,阐明 3 来自哪里:

declare @Filter table(ID nchar(1) primary key)

insert into @Filter values ('a'), ('b'), ('c')

select a.Area_ID
from Table1 as a
where a.Supp_ID in (select t.ID from @Filter as t)
group by a.Area_ID
having count(distinct Supp_ID) = (select count(*) from @Filter)

sql fiddle demo

关于sql - 根据同一表的第二列的给定值,从表的一列中查找公共(public)值(交集),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19396307/

相关文章:

c# - 是否有 Entity Framework 7 数据库优先 POCO 生成器?

c++ - C++ 中的射线网格交集或 AABB 树实现,开销很小?

sql - 计算多列的不同列数

mysql - 如何仅将 MySQL 权限授予特定行

sql - 创建计算列并舍入

sql-server - VBScript - 从 SQL Server 2008 上的存储过程中检索标量值

java - 在 HashSet 中使用并集和交集方法

c - 使用 C 实现 2 个链表的交集

sql - 将两个 Access 表中的值相乘

mysql - 每次更新后将所有字段更新到日志表