2012-05-14 88 views
-1

我有一張客戶,訂單和項目表。我想寫一份報告,每行一位顧客(對於這個例子,我假設每位顧客一份訂單)以及是否訂購了某些商品。T-SQL:顯示或不顯示記錄列表中的值

客戶

 
id 
firstName 

訂單

 
id 
customers_id 

項目

 
id 
orders_id 

我在顯示一行時遇到問題,如果某個特定項目未被排序(例如,蘋果)

我想是有3列的報告:

  • 蘋果
  • 香蕉

下面是我使用的查詢:

SELECT c.firstName, i_apple, i_banana 
FROM customers 
LEFT JOIN orders o ON c.id = o.customers_id 
LEFT JOIN items i_apple ON o.id = i_apple.orders_id 
LEFT JOIN items i_banana ON o.id = i_banana.orders_id 
WHERE i_apple = 'apple' AND i_banana = 'banana' 
+0

如果您添加'sql'和'sql-server-version'標籤,您將獲得更多關注。 –

回答

0

一切都很好,但你需要在連接的ON子句中過濾外部連接,否則將外部連接轉換爲內部連接。我已將Name列添加到Items中,但它應該可能是ProductID,這是ProductName與ProductName的外鍵。

SELECT c.firstName, i_apple.Name Apple, i_banana.Name Banana 
FROM customers 
LEFT JOIN orders o 
    ON c.id = o.customers_id 
LEFT JOIN items i_apple 
    ON o.id = i_apple.orders_id 
AND i_apple.Name = 'apple' 
LEFT JOIN items i_banana 
    ON o.id = i_banana.orders_id 
AND i_banana.Name = 'banana'