尝试在select语句中使用特定范围,但包括所有外连接

时间:2014-08-12 22:19:59

标签: mysql join

我正在尝试创建一个表格,显示特定年份的年度销售额,但将当年没有销售额的所有帐户返回为0美元。我不想过滤WHERE子句,因为我想要所有帐户的完全左连接。当我没有指定日期范围时,我可以将没有销售的帐户的所有销售总额作为空。

我查看了这些问题,但似乎无法找到答案。

SELECT
   DA.Account_Name,
   sum(fs.total_sales) as total_annual_sales
FROM
   Dim_Account as da
   left outer join
   Fact_Sales as fs
    on da.account_key=fs.account_key

WHERE fs.date_key >=20100101 AND fs.date_key<=20101231

GROUP BY
    da.account_key
ORDER BY
    da.account_name    

结果看起来像

Account Name     Total_Annual_Sales
Bob's Furniture    100,000
Mary's Emporium     17,000
Joe's Warehouse    150,000

但是,如果我不包括我获得所有销售总额的日期

Account Name     Total_Annual_Sales
Bob's Furniture    451,000
Gene's Garage        5,000
Mary's Emporium     34,000
Frank's Furnishing    NULL
Joe's Warehouse    250,700
Harry's House         NULL

我想看到的是从2010年开始的销售

Account Name    Total_Annual_Sales
Bob's Furniture   100,000
Gene's Garage           0
Mary's Emporium    17,000
Frank's Furnishing      0
Joe's Warehouse    150,000
Harry's House           0

1 个答案:

答案 0 :(得分:0)

尝试在加入表的日期添加过滤器..如果它是左连接,它应该在那里有空值...然后合并总和以显示0如果它的空...如果这不是&# 39;工作请发布一个sqlfiddle的一些示例数据,以便我可以让它工作。应该是一个简单的解决方案。

示例查询:

SELECT
   DA.Account_Name,
   IF (SUM(fs.total_sales)> 0, SUM(fs.total_sales), 0) as total_annual_sales
FROM Dim_Account as da
LEFT JOIN Fact_Sales as fs
  ON da.account_key=fs.account_key
 AND (fs.date_key >=20100101 AND fs.date_key<=20101231)
GROUP BY da.account_key
ORDER BY da.account_name