2015-06-10 57 views
0

我需要從購買摘要表中返回客戶名稱列表,但前提是客戶在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含有兩個錘子和在同一事務中的螺桿。

+1

您的輸出中的交易3在哪裏? –

回答

2

使用子選擇找到交易既包括錘和螺絲:

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') 

刪除最後一行似乎也排釘應返還!

+0

請務必在螺絲後面加上引號:D –

+0

@JeremyC。謝謝! – jarlh

+0

我也把測試數據放在小提琴裏,看到你在我有機會開始之前完成了答案,你可以使用它:D http://sqlfiddle.com/#!3/4e468/1編輯:現在用正確的測試數據http://sqlfiddle.com/#!3/08f20/1 –

相關問題