3

次の表は、サプライヤーが製品を提供する地域を示しています。次の 3 つの列があります。

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_ID a、b、cを SP に渡すと、3 つのサプライヤーすべてに共通のArea_ID R、Tが返されるようなストアド プロシージャが必要です。つまり、特定の 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

上記のコードは、正確に 3 つの Supp_IDがあることがわかっている場合に 適していますが、Supp_ID の数が異なる場合に実行時に上記のロジックを使用する方法を見つけることができません。

今、私はSPの上にどのように書くべきかを見つけることができません.

前もって感謝します。

4

2 に答える 2

0

次のクエリを使用します。これにより、各サプライヤーの一意のエリア ID がすべて取得され、N 回存在するものだけが選択されます。

DECLARE @param TABLE (supp_id int)

insert into @param values (1),(2),(3)

select Area_ID from 
    (select Area_ID from table_name t
    inner join @param p on p.supp_id = t.supp_id) x
group by x.Area_ID
having count(*) = (select count(*) from @param)
于 2013-10-16T06:10:39.093 に答える