2013-03-28 53 views
1

我认为我的问题真的很糟糕,请在多个值上执行sql IN查找包含特定值的列的记录

这是我到目前为止的SQL Fiddle

所以长话短说,我有Cases有多个Types

我需要过滤含有Cases某些Types

说我有6行(COL1,COL2)...(1,2),(1,3)(1,4),(2,3 ),(2,4),(2,5) 如何仅选择在col2中有2,AND 3和4的Cases

2,3,4只是一个用例。它可能只是关于任何组合(SQL小提琴有一对夫妇的表格)。

+0

您是否对案件类型数量有长期限制? –

+0

不完全确定我遵循你所问的,但没有。用户可以添加案例类型。除此之外,用户还可以选择任意类型的组合来确定哪些案例是“可结算的”。我整天都在认真地搔着我的脑袋。 – MisterIsaak

+0

我在想,如果你的案例类型数量很少(例如32),你可能已经能够在where子句中得到一些二进制数学。听起来不像是一种选择。 –

回答

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 
) 
+0

这是一个负面的红色骑手。返回匹配“Any”的案例,我需要一个“All”... – MisterIsaak

+0

对不起。长天 –

0

尝试:

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

(SQLFiddle here

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 
+0

我不认为这会工作,因为我正在寻找的类型的COUNT不总是3.它可能是2或4等不同的类型。 – MisterIsaak

+0

@JIsaak - 你是怎么知道你在寻找哪种/哪几种类型的。这是你可以预见的吗?例如,是否有用户通过界面选择的特征(如'可结算',或'仅偶数'等)? – Chains

+0

最终用户有一个接口来将“Type”设置为可计费。他们基本上在我的SQL小提琴中创建了两个“可计费”表。例如,他们可以选择:只有在类型3和类型4也存在的情况下,类型2才是可结算的。 – MisterIsaak

相关问题