2

SQLServer2008バックエンドを備えたASP.NETアプリケーションがあります。SpecimenEventsテーブルには次の設定があります。

EventID SpecimenID EventType
      1 101 A       
      2 102 A
      3103 A
      4 101 B
      5103 B
      6101 C

入力としてSpecimenIDのリストが与えられた場合、入力リスト内のすべてのSpecimenIDにそれらのEventType(s)COMMONのみを返すクエリをどのように記述しますか?例えば:

(101,102,103)のSpecimenID入力リストは「A」を返す必要があります

(101)のSpecimenID入力リストは、「A」、「B」、「C」を返す必要があります

(101,103)のSpecimenID入力リストは'A'、'B'..を返す必要があります。

4

2 に答える 2

2
select distinct EventType
from (
    select EventType, count(distinct SpecimenID) as SpecimenCount
    from SpecimenEvents
    where SpecimenID in (101,103)
    group by EventType
    having count(distinct SpecimenID) = 2 -- Make this match the list length
) x
于 2012-10-23T19:11:05.063 に答える
0

このコードを試す

    declare @1 varchar(10),@2 varchar(10), @3 varchar(10), @sql nvarchar(4000)
set @1='101'
set @2= '103'
set @3= null

set @sql =''
if @1 is not null set @sql = @sql+'
intersect
SELECT [EventType] from SpecimenEvents where [SpecimenID] = ' + @1
if @2 is not null set @sql = @sql+'
intersect
SELECT [EventType] from SpecimenEvents where [SpecimenID] = ' + @2
if @3 is not null set @sql = @sql+'
intersect
SELECT [EventType] from SpecimenEvents where [SpecimenID] = ' + @3
if len(@sql)>13 
begin
set @sql = substring(@sql,14,4000)
execute sp_executesql @sql
end

アミット・パテル

于 2013-03-07T15:28:02.213 に答える