使用COUNT和SUM时,将NULL结果包含为零

时间:2013-04-28 23:14:50

标签: sql count null

我是SQL的新手,我正致力于从销售点软件创建数据Feed以进行第三方分析。以下是将上传到数据Feed的CSV的要求:

  

.CSV文件应包含具有以下值的行:   STORE ID表示唯一的商店标识符(即Store1),并且应包括您的链名称(与文件名相同的格式)和特定的商店编号。这不应包括逗号之前或之后的任何空格或标点符号。

     
    

- MM / DD / YYYY格式的日期

         

-HH对应使用24小时制的适当小时(0-23,0表示午夜到凌晨1点)。

         

- COUNT值是该特定营业时间的交易计数,如上一节所定义。

         

- SALES DOLLARS值对应于该小时内累计的销售总额,如上一节中所定义。请注意,不能使用逗号作为千位分隔符或美元符号符号。

         

- TRAFFIC PLACEHOLDER是必填字段,但应保留为0值。

         
      

示例输出

             

Wxyz434,02 / 28 / 2011,13,56,446.34,0

             

Wxyz434,02 / 28 / 2011,14,61,482.28,0

             

Wxyz434,02 / 28 / 2011,15,63,382.80,0

    
  

我已经能够在我的POS软件中的数据导出实用程序中找到这些表,并且我已经使用了这个SQL查询:

/***** Script for Headcount Data *****/
select [STR_ID]
  ,[BUS_DAT]
  ,[TKT_TIM_HR]
              ,COUNT ([TKT_NO])
  ,SUM ([SAL_TOT])

from MyData.dbo.VI_PS_TKT_HIST
where BUS_DAT between '04-24-2013 00:00:00' and '04-24-2013 11:59:59' and 
TKT_TIM_HR between '10' and '19'

group by BUS_DAT, STR_ID, TKT_TIM_HR

部分结果:

  
    

“STR_ID”, “BUS_DAT”, “TKT_TIM_HR”, “字段”, “Field_1”

         

“1”,“4/24/2013 12:00:00.000 AM”,19,1,270.27

         

“11”,“2013年4月24日12:00:00.000 AM”,10,1,32.95

         

“11”,“4/24/2013 12:00:00.000 AM”,12,4,229.24

         

“11”,“2013年4月24日12:00:00.000 AM”,13,1,137.28

  

您会注意到TKT_TIM_HR是处理故障单的HOUR,并且在11小时内没有处理过故障单。

即使没有门票/销售号码,我如何修改查询以便11小时内存在一行? (将NULL计为零??)

非常感谢您的帮助,

泰勒

2 个答案:

答案 0 :(得分:0)

最简单的方法是,如果您可以使用,则将列设置为不允许空值并且默认值为0.

答案 1 :(得分:0)

您需要创建一个“日历”关系,以用作子查询,该子查询可以是LEFT OUTER JOIN的LHS。如果你只需要按小时报告,这样的事情就可以了:

select [Hour], AmPm
from (
  select Hour= 1 union all select  2 union all select  3 union all select  4 union all
  select Hour= 5 union all select  6 union all select  7 union all select  8 union all
  select Hour= 9 union all select 10 union all select 11 union all select 12 
) H
cross join ( select AmPm = 'am' union all select 'pm'
) T
order by AmPm,[Hour]