我需要从购买汇总表中返回客户名称列表,但前提是客户在1次交易中购买了2个最终项目。
例如表格'交易'
╔══════════════╦════════╦══════════════╦════════╗ ║ CustomerName ║ Item ║ Transaction# ║ Amount ║ ╠══════════════╬════════╬══════════════╬════════╣ ║ Smith ║ Hammer ║ 1 ║ 50.00 ║ ║ Smith ║ Nail ║ 1 ║ 4.00 ║ ║ Smith ║ Screw ║ 1 ║ 5.00 ║ ║ Brown ║ Nail ║ 2 ║ 4.00 ║ ║ Brown ║ Screw ║ 2 ║ 4.00 ║ ║ Jones ║ Hammer ║ 3 ║ 50.00 ║ ║ Jones ║ Screw ║ 3 ║ 4.00 ║ ║ Smith ║ Nail ║ 4 ║ 50.00 ║ ║ Smith ║ Hammer ║ 4 ║ 4.00 ║ ║ Smith ║ Screw ║ 5 ║ 5.00 ║ ╚══════════════╩════════╩══════════════╩════════╝
我只想回复在同一笔交易中购买了锤子和螺丝的客户。在同一笔交易中购买其他物品并不重要,我只需要锤子和螺丝的细节,并且只有在同一笔交易中同时存在锤子和螺钉。
所以上面只需要返回:
╔══════════════╦════════╦══════════════╦════════╗ ║ CustomerName ║ Item ║ Transaction# ║ Amount ║ ╠══════════════╬════════╬══════════════╬════════╣ ║ Smith ║ Hammer ║ 1 ║ 50.00 ║ ║ Smith ║ Screw ║ 1 ║ 5.00 ║ ╚══════════════╩════════╩══════════════╩════════╝
因为在同一交易中只有交易1包含锤子和螺钉。
答案 0 :(得分:2)
使用子选择查找包括Hammer和Screw的交易:
select CustomerName, Item, Transaction#, Amount
from purchase
where Transaction# in (select Transaction# from purchase
where Item in ('Hammer', 'Screw')
group by Transaction#
having count(distinct Item) = 2)
and Item in ('Hammer', 'Screw')
如果还应该返回Nail行,则删除最后一行!