按照时间段来统计每家门店每月的单号总数

szlixiaolong 2015-03-09 10:03:53
销售明细表如下:
门店名称 单号 时间
A门店 030214030100014 2014-03-01 10:04:54:376
B门店 040214030200014 2014-03-02 10:04:54:376
C门店 050214030300014 2014-03-03 10:04:54:376
A门店 030214040100015 2014-04-01 10:04:54:376
B门店 040214040200015 2014-04-02 10:04:54:376
C门店 050214040300015 2014-04-03 10:04:54:376
A门店 030214030100015 2014-03-01 10:05:54:376
B门店 040214030200015 2014-03-02 10:05:54:376
C门店 050214030300015 2014-03-03 10:05:54:376
A门店 030214040100016 2014-04-01 10:05:54:376
B门店 040214040200016 2014-04-02 10:05:54:376
C门店 050214040300016 2014-04-03 10:05:54:376
A门店 030215040100016 2015-04-01 10:05:54:376
B门店 040215040200016 2015-04-02 10:05:54:376
C门店 050215040300016 2015-04-03 10:05:54:376

最终需要实现的数据统计如下:
门店名称 2014年3月份单号总计 2014年4月份单号总计 2015年4月份单号总计
A门店 2 2 1
B门店 2 2 1
C门店 2 2 1



...全文
438 44 打赏 收藏 转发到动态 举报
写回复
用AI写文章
44 条回复
切换为时间正序
请发表友善的回复…
发表回复
szlixiaolong 2015-03-30
  • 打赏
  • 举报
回复
引用 41 楼 ky_min 的回复:
引用 40 楼 szlixiaolong 的回复:
可否把整行为0的屏蔽?
加了条件应该不会有全为0的了
请处理一下这个贴子:http://bbs.csdn.net/topics/391006610
szlixiaolong 2015-03-11
  • 打赏
  • 举报
回复
我执行了一下,可以了。谢谢。
szlixiaolong 2015-03-11
  • 打赏
  • 举报
回复
引用 41 楼 ky_min 的回复:
引用 40 楼 szlixiaolong 的回复:
可否把整行为0的屏蔽?
加了条件应该不会有全为0的了
请重新修改一下,谢谢。
还在加载中灬 2015-03-11
  • 打赏
  • 举报
回复
引用 40 楼 szlixiaolong 的回复:
可否把整行为0的屏蔽?
加了条件应该不会有全为0的了
szlixiaolong 2015-03-11
  • 打赏
  • 举报
回复
引用 39 楼 ky_min 的回复:
[quote=引用 37 楼 szlixiaolong 的回复:] https://img-bbs.csdn.net/upload/201503/11/1426038651_252445.jpg
我想,你数据表还有其它个月的数据
SELECT a.branch_name
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201403'THEN b.flow_no END)[2014年3月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201404'THEN b.flow_no END)[2014年4月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201405'THEN b.flow_no END)[2014年5月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201406'THEN b.flow_no END)[2014年6月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201407'THEN b.flow_no END)[2014年7月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201408'THEN b.flow_no END)[2014年8月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201409'THEN b.flow_no END)[2014年9月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201410'THEN b.flow_no END)[2014年10月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201411'THEN b.flow_no END)[2014年11月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201412'THEN b.flow_no END)[2014年12月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201501'THEN b.flow_no END)[2014年1月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201502'THEN b.flow_no END)[2015年2月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201503'THEN b.flow_no END)[2015年3月份单号总计]
	,COUNT(DISTINCT b.flow_no)[总合计]
FROM bi_t_branch_info a
	JOIN pos_t_payflow b ON a.branch_no=b.branch_no
WHERE b.oper_date BETWEEN '20140301'AND'20150331'
GROUP BY a.branch_name
[/quote]
引用 39 楼 ky_min 的回复:
[quote=引用 37 楼 szlixiaolong 的回复:] https://img-bbs.csdn.net/upload/201503/11/1426038651_252445.jpg
我想,你数据表还有其它个月的数据
SELECT a.branch_name
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201403'THEN b.flow_no END)[2014年3月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201404'THEN b.flow_no END)[2014年4月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201405'THEN b.flow_no END)[2014年5月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201406'THEN b.flow_no END)[2014年6月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201407'THEN b.flow_no END)[2014年7月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201408'THEN b.flow_no END)[2014年8月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201409'THEN b.flow_no END)[2014年9月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201410'THEN b.flow_no END)[2014年10月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201411'THEN b.flow_no END)[2014年11月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201412'THEN b.flow_no END)[2014年12月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201501'THEN b.flow_no END)[2014年1月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201502'THEN b.flow_no END)[2015年2月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201503'THEN b.flow_no END)[2015年3月份单号总计]
	,COUNT(DISTINCT b.flow_no)[总合计]
FROM bi_t_branch_info a
	JOIN pos_t_payflow b ON a.branch_no=b.branch_no
WHERE b.oper_date BETWEEN '20140301'AND'20150331'
GROUP BY a.branch_name
[/quote] 可否把整行为0的屏蔽?
还在加载中灬 2015-03-11
  • 打赏
  • 举报
回复
引用 37 楼 szlixiaolong 的回复:
https://img-bbs.csdn.net/upload/201503/11/1426038651_252445.jpg
我想,你数据表还有其它个月的数据
SELECT a.branch_name
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201403'THEN b.flow_no END)[2014年3月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201404'THEN b.flow_no END)[2014年4月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201405'THEN b.flow_no END)[2014年5月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201406'THEN b.flow_no END)[2014年6月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201407'THEN b.flow_no END)[2014年7月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201408'THEN b.flow_no END)[2014年8月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201409'THEN b.flow_no END)[2014年9月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201410'THEN b.flow_no END)[2014年10月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201411'THEN b.flow_no END)[2014年11月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201412'THEN b.flow_no END)[2014年12月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201501'THEN b.flow_no END)[2014年1月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201502'THEN b.flow_no END)[2015年2月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201503'THEN b.flow_no END)[2015年3月份单号总计]
	,COUNT(DISTINCT b.flow_no)[总合计]
FROM bi_t_branch_info a
	JOIN pos_t_payflow b ON a.branch_no=b.branch_no
WHERE b.oper_date BETWEEN '20140301'AND'20150331'
GROUP BY a.branch_name
szlixiaolong 2015-03-11
  • 打赏
  • 举报
回复
引用 35 楼 ky_min 的回复:
[quote=引用 33 楼 szlixiaolong 的回复:]全为0,是指有些门店根本没有任何销售数据,所以统计出来的一行,全为0,,COUNT(DISTINCT b.flow_no)[总合计],这行是统计所有门店的,我想分别统计相应门店的所有月份的总合计。
总合计,你试过没有,如果没有就试一下,不要想当然了

还有全为0,如果是内连接不会出现这样的情况,你确定整行全部是0?

我不确定你有没有改过我的语句[/quote]

我加了COUNT(DISTINCT b.flow_no)[总合计]之后,发现统计出来的是相应门店所有的单号总计,而不是这个月的单号总计。

szlixiaolong 2015-03-11
  • 打赏
  • 举报
回复
https://img-bbs.csdn.net/upload/201503/11/1426038651_252445.jpg
szlixiaolong 2015-03-11
  • 打赏
  • 举报
回复
引用 35 楼 ky_min 的回复:
[quote=引用 33 楼 szlixiaolong 的回复:]全为0,是指有些门店根本没有任何销售数据,所以统计出来的一行,全为0,,COUNT(DISTINCT b.flow_no)[总合计],这行是统计所有门店的,我想分别统计相应门店的所有月份的总合计。
总合计,你试过没有,如果没有就试一下,不要想当然了 还有全为0,如果是内连接不会出现这样的情况,你确定整行全部是0? 我不确定你有没有改过我的语句[/quote] 确定整行全部是0,我没有修改你的语句。我刚才截图给你看了。
还在加载中灬 2015-03-11
  • 打赏
  • 举报
回复
引用 33 楼 szlixiaolong 的回复:
全为0,是指有些门店根本没有任何销售数据,所以统计出来的一行,全为0,,COUNT(DISTINCT b.flow_no)[总合计],这行是统计所有门店的,我想分别统计相应门店的所有月份的总合计。
总合计,你试过没有,如果没有就试一下,不要想当然了 还有全为0,如果是内连接不会出现这样的情况,你确定整行全部是0? 我不确定你有没有改过我的语句
szlixiaolong 2015-03-11
  • 打赏
  • 举报
回复
引用 33 楼 szlixiaolong 的回复:
[quote=引用 32 楼 ky_min 的回复:]
[quote=引用 31 楼 szlixiaolong 的回复:]你好,还有一个小问题,执行以上语句后,发现有些门店为0的全部统计出来了,不知如何修改了? 还有所有月份的最后一列,再加上一个总合计。
没明白,全为0的是什么

然后总合计的话,在这地方,加这么一句

,COUNT(DISTINCT b.flow_no)[总合计]
FROM bi_t_branch_info a[/quote]
全为0,是指有些门店根本没有任何销售数据,所以统计出来的一行,全为0,,COUNT(DISTINCT b.flow_no)[总合计],这行是统计所有门店的,我想分别统计相应门店的所有月份的总合计。

[/quote]

szlixiaolong 2015-03-11
  • 打赏
  • 举报
回复
引用 32 楼 ky_min 的回复:
[quote=引用 31 楼 szlixiaolong 的回复:]你好,还有一个小问题,执行以上语句后,发现有些门店为0的全部统计出来了,不知如何修改了? 还有所有月份的最后一列,再加上一个总合计。
没明白,全为0的是什么 然后总合计的话,在这地方,加这么一句 ,COUNT(DISTINCT b.flow_no)[总合计] FROM bi_t_branch_info a[/quote] 全为0,是指有些门店根本没有任何销售数据,所以统计出来的一行,全为0,,COUNT(DISTINCT b.flow_no)[总合计],这行是统计所有门店的,我想分别统计相应门店的所有月份的总合计。
还在加载中灬 2015-03-11
  • 打赏
  • 举报
回复
引用 31 楼 szlixiaolong 的回复:
你好,还有一个小问题,执行以上语句后,发现有些门店为0的全部统计出来了,不知如何修改了? 还有所有月份的最后一列,再加上一个总合计。
没明白,全为0的是什么 然后总合计的话,在这地方,加这么一句 ,COUNT(DISTINCT b.flow_no)[总合计] FROM bi_t_branch_info a
szlixiaolong 2015-03-11
  • 打赏
  • 举报
回复
引用 29 楼 ky_min 的回复:
[quote=引用 28 楼 szlixiaolong 的回复:]...
SELECT a.branch_name
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201403'THEN b.flow_no END)[2014年3月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201404'THEN b.flow_no END)[2014年4月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201405'THEN b.flow_no END)[2014年5月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201406'THEN b.flow_no END)[2014年6月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201407'THEN b.flow_no END)[2014年7月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201408'THEN b.flow_no END)[2014年8月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201409'THEN b.flow_no END)[2014年9月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201410'THEN b.flow_no END)[2014年10月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201411'THEN b.flow_no END)[2014年11月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201412'THEN b.flow_no END)[2014年12月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201401'THEN b.flow_no END)[2014年1月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201402'THEN b.flow_no END)[2015年2月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201403'THEN b.flow_no END)[2015年3月份单号总计]
FROM bi_t_branch_info a
	JOIN pos_t_payflow b ON a.branch_no=b.branch_no
GROUP BY a.branch_name
之前我搞错了 但有个地方你需要理解清楚 GROUP BY的意思,不能把b.flow_no,b.oper_date 也加进来,那就形似神非了,不知道在统计什么了[/quote] 你好,还有一个小问题,执行以上语句后,发现有些门店为0的全部统计出来了,不知如何修改了? 还有所有月份的最后一列,再加上一个总合计。
szlixiaolong 2015-03-10
  • 打赏
  • 举报
回复
引用 29 楼 ky_min 的回复:
[quote=引用 28 楼 szlixiaolong 的回复:]...
SELECT a.branch_name
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201403'THEN b.flow_no END)[2014年3月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201404'THEN b.flow_no END)[2014年4月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201405'THEN b.flow_no END)[2014年5月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201406'THEN b.flow_no END)[2014年6月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201407'THEN b.flow_no END)[2014年7月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201408'THEN b.flow_no END)[2014年8月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201409'THEN b.flow_no END)[2014年9月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201410'THEN b.flow_no END)[2014年10月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201411'THEN b.flow_no END)[2014年11月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201412'THEN b.flow_no END)[2014年12月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201401'THEN b.flow_no END)[2014年1月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201402'THEN b.flow_no END)[2015年2月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201403'THEN b.flow_no END)[2015年3月份单号总计]
FROM bi_t_branch_info a
	JOIN pos_t_payflow b ON a.branch_no=b.branch_no
GROUP BY a.branch_name
之前我搞错了 但有个地方你需要理解清楚 GROUP BY的意思,不能把b.flow_no,b.oper_date 也加进来,那就形似神非了,不知道在统计什么了[/quote] 谢谢,终于搞定了,非常感谢您的耐心。
szlixiaolong 2015-03-09
  • 打赏
  • 举报
回复
引用 21 楼 szlixiaolong 的回复:
你好,现在还是不能统计相应月份所有单号的总数。
当前的语句只能统计每个单号的合计数。 SELECT b.flow_no, a.branch_name, sum(distinct CASE WHEN CONVERT(VARCHAR(6), b.oper_date,112)='201403'THEN 1 END)[2014年3月份单号总计] FROM dbo.pos_t_payflow b,bi_t_branch_info a where b.oper_date>= '2014-03-01 00:00:00' And b.oper_date<= '2014-03-01 23:59:59' and a.branch_no=b.branch_no group by b.flow_no,a.branch_name,b.oper_date
szlixiaolong 2015-03-09
  • 打赏
  • 举报
回复
你好,现在还是不能统计相应月份所有单号的总数。

szlixiaolong 2015-03-09
  • 打赏
  • 举报
回复
谢谢,我再测试。
还在加载中灬 2015-03-09
  • 打赏
  • 举报
回复
我没明白你同单什么意思,你试下这种方式COUNT DISTINCT
SELECT 门店名称
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),时间,112)='201403'THEN 单号 END)[2014年3月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),时间,112)='201404'THEN 单号 END)[2014年4月份单号总计]
	,COUNT(DISTINCT CASE WHEN CONVERT(VARCHAR(6),时间,112)='201504'THEN 单号 END)[2015年4月份单号总计]
FROM 销售明细表 GROUP BY 门店名称
szlixiaolong 2015-03-09
  • 打赏
  • 举报
回复
加载更多回复(24)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧