我有一个大约 200,000 多条记录的列表,按子产品线划分,然后汇总到一个产品线。
例如:
(顺便说一句,我如何在我的问题中实际显示表格?)
我想要的是一个 where 语句,它只包含其产品线中只有电缆和/或电话的结果。例如,CT-23415 有笔记本电脑和电缆,所以它会从这些结果 b/c 中排除,而它有电话,它也有笔记本电脑,我只想看到电话、电缆或组合的结果二。CT-12345 和 CT-41567 将是唯一包含的行。
有任何想法吗?
我有一个大约 200,000 多条记录的列表,按子产品线划分,然后汇总到一个产品线。
例如:
(顺便说一句,我如何在我的问题中实际显示表格?)
我想要的是一个 where 语句,它只包含其产品线中只有电缆和/或电话的结果。例如,CT-23415 有笔记本电脑和电缆,所以它会从这些结果 b/c 中排除,而它有电话,它也有笔记本电脑,我只想看到电话、电缆或组合的结果二。CT-12345 和 CT-41567 将是唯一包含的行。
有任何想法吗?
select *
from YourTable yt1
where ProductLine in ('Cable', 'Telephone')
and not exists
(
select *
from YourTable yt2
where yt1.Contract = yt2.Contract
and yt2.ProductLine not in ('Cable', 'Telephone')
)
这是“set-within-sets”查询的一个示例。我喜欢用聚合来做这些,having
因为这是非常普遍的。
在你的情况下:
select contract
from list
group by contract
having sum(case when ProductLine not in ('Cable', 'Telephone') then 1 else 0 end) = 0
也就是说,它计算合同中不可接受的产品线的数量。如果数字为 0,则所有都可以接受并返回合同。