我认为我的问题真的很糟糕,请在多个值上执行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小提琴有一对夫妇的表格)。
我认为我的问题真的很糟糕,请在多个值上执行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小提琴有一对夫妇的表格)。
这是否更接近?
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
)
这是一个负面的红色骑手。返回匹配“Any”的案例,我需要一个“All”... – MisterIsaak
对不起。长天 –
尝试:
select [CaseId]
from CaseTypes
where [TypeID] in (2,3,4)
group by [CaseId]
having count(distinct [TypeID]) = 3
(SQLFiddle here)
的东西夫妇,你可以尝试:
使用派生表:
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
我不认为这会工作,因为我正在寻找的类型的COUNT不总是3.它可能是2或4等不同的类型。 – MisterIsaak
@JIsaak - 你是怎么知道你在寻找哪种/哪几种类型的。这是你可以预见的吗?例如,是否有用户通过界面选择的特征(如'可结算',或'仅偶数'等)? – Chains
最终用户有一个接口来将“Type”设置为可计费。他们基本上在我的SQL小提琴中创建了两个“可计费”表。例如,他们可以选择:只有在类型3和类型4也存在的情况下,类型2才是可结算的。 – MisterIsaak
您是否对案件类型数量有长期限制? –
不完全确定我遵循你所问的,但没有。用户可以添加案例类型。除此之外,用户还可以选择任意类型的组合来确定哪些案例是“可结算的”。我整天都在认真地搔着我的脑袋。 – MisterIsaak
我在想,如果你的案例类型数量很少(例如32),你可能已经能够在where子句中得到一些二进制数学。听起来不像是一种选择。 –