2

我们有一个带有 SQL Server 2008 后端的 ASP.NET 应用程序。我们的 SpecimenEvents 表中有以下设置:

EventID SpecimenID EventType
      1 101 一个       
      2 102 安
      3 103 一个
      4 101乙
      5 103 乙
      6 101℃

给定一个 SpecimenID 列表作为输入——您将如何编写一个查询以仅将那些 EventType(s) COMMON 返回到输入列表中的所有 SpecimenID?例如:

(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 回答