【发布时间】:2013-04-22 13:15:48
【问题描述】:
我对 SQL 完全陌生,我正在努力从销售点软件创建数据馈送以供第三方分析。以下是将上传到数据馈送的 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","Field_1"
"1","4/24/2013 12:00:00.000 AM",19,1,270.27
"11","4/24/2013 12:00:00.000 AM",10,1,32.95
"11","4/24/2013 12:00:00.000 AM",12,4,229.24
"11","4/24/2013 12:00:00.000 AM",13,1,137.28
您会注意到 TKT_TIM_HR 是处理工单的小时数,并且在 11 小时内没有处理任何工单。
如何修改查询,以便在 11 小时内存在一行,即使没有门票/销售号码存在? (把NULL算为零??)
非常感谢您的帮助,
泰勒
【问题讨论】:
-
仅供参考,您要实现的目标称为
filling gaps in sparse data,通常最好通过partitioned outer join到一个表(或查询)中完成,该表列出了您需要的范围内的每天/小时组合.您使用的是什么 RDBMS?是mysql、oracle、sqlite等吗? -
请注意,如果
partitioned outer join不可用,您可以在日期和小时表上使用left outer join。 -
谢谢汤米。我可以访问 SQL Server Studio 2008 R2,但是该脚本用于从 POS 软件本身(Counterpoint SQL)生成数据导出。