我正在尝试创建一个表格,显示特定年份的年度销售额,但将当年没有销售额的所有帐户返回为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
答案 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