2012-05-14 70 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'