我认为我的问题真的归结为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 有几个表可以确定这一点)。
我认为我的问题真的归结为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 有几个表可以确定这一点)。
这更接近一点吗?
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
)
尝试:
select [CaseId]
from CaseTypes
where [TypeID] in (2,3,4)
group by [CaseId]
having count(distinct [TypeID]) = 3
(这里的 SQLFiddle )
您可以尝试几件事:
使用派生表:
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