如何在仍使用IF NOT NULL时获取所有行

时间:2017-10-23 13:44:44

标签: sql

我已经到处搜索,无法找到解决方案(如果有的话)。另外,我可能会看到这个错误(我是SQL的新手)。

我正在尝试获取显示取消日期的总销售额。这段代码工作得很好。我的问题是:有没有办法让所有行(即空行)显示为0总销售额?我看这个完全错了吗?有人可以帮助我朝着正确的方向前进吗?

SELECT "Div Code", "Agent Name", SUM("Gross Sale")
FROM salessummary
WHERE "Cancel Date" IS NOT NULL
GROUP BY "Div Code", "Agent Name";

此数据输出为12行,显示:

Div Code |  Agent Name  |  Gross Sale
  SC         John Smith      $120
  NC         Jane Smith      $130
  NC         Will Smith      $40

我希望它显示所有30行(即使代理没有取消):

Div Code |  Agent Name  |  Gross Sale  
  SC         John Smith      $120  
  *SC         Jada Smith      $0*  
  NC         Jane Smith      $130  
  NC         Will Smith      $40  

问题是我的总销售额是否取决于是否有取消日期。这就是定义我的数据的原因。

2 个答案:

答案 0 :(得分:2)

如果问题是nav.main-menu li可能有Gross Sale个值,我建议:

NULL

SELECT "Div Code", "Agent Name", COALESCE(SUM("Gross Sale"), 0) as "Gross Sale" FROM salessummary WHERE "Cancel Date" IS NOT NULL GROUP BY "Div Code", "Agent Name"; 是ANSI标准函数,用指定值替换COALESCE()值。在NULL之后执行此操作意味着仅调用一次 - 微优化,但SUM()中会忽略NULL值。

如果你想要所有“div代码”/“代理名称”组合 - 甚至那些没有取消的组合 - 使用条件聚合:

SUM()

答案 1 :(得分:0)

你可以尝试:

 SUM(ISNULL("Gross Sale",0))