1

我认为我的问题真的归结为IN对多个值执行 sql。

这是我到目前为止所拥有的SQL Fiddle 。

长话短说,我Cases有多个Types.

我需要过滤Cases包含某些Types

假设我有 6 行 (col1,col2)... (1,2),(1,3)(1,4),(2,3),(2,4),(2,5) 我该怎么做只选择Cases在 col2 中有 2、AND 3 AND 4 的?

2,3,4 只是一个用例。它可以是任何组合(SQL Fiddle 有几个表可以确定这一点)。

4

3 回答 3

0

这更接近一点吗?

SELECT * from CaseTypes CT
INNER JOIN TypeBillable TB    ON CT.TypeId = TB.TypeId
where CT.CaseId in
(
select CaseID from CaseTypes
PIVOT (count (TypeId) for TypeId in ([2],[3],[4])) as x
where [2] > 0 and [3] > 0 and [4] > 0
)
于 2013-03-28T16:39:38.463 回答
0

尝试:

select [CaseId]
from CaseTypes
where [TypeID] in (2,3,4)
group by [CaseId]
having count(distinct [TypeID]) = 3

(这里的 SQLFiddle )

于 2013-03-28T16:46:46.153 回答
0

您可以尝试几件事:

使用派生表:

SELECT a.col1
FROM (SELECT col1 FROM Cases WHERE col2 = 2) a
INNER JOIN (SELECT col1 FROM Cases WHERE col2 = 3) b ON a.col1 = b.col1
INNER JOIN (SELECT col1 FROM Cases WHERE col2 = 4) c ON a.col1 = c.col1

使用聚合:

SELECT col1
FROM Cases
GROUP BY col1
HAVING 
   SUM(CASE col2 WHEN 2 THEN 1 ELSE 0 END) > 0 AND
   SUM(CASE col2 WHEN 3 THEN 1 ELSE 0 END) > 0 AND
   SUM(CASE col2 WHEN 4 THEN 1 ELSE 0 END) > 0
于 2013-03-28T16:48:55.393 回答