DECLARE @SQL VARCHAR(8000)--SQL2005+可以用VARCHAR(MAX) SET @SQL='SELECT 门店名称' SELECT @SQL=@SQL+',SUM(CASE WHEN CONVERT(VARCHAR(6),时间,112)='''+SaleTime+'''THEN 1 END)[' +LEFT(SaleTime,4)+'年'+CAST(RIGHT(SaleTime,2)+0 AS VARCHAR(2))+'月份单号总计]' FROM(SELECT CONVERT(VARCHAR(6),时间,112)SaleTime FROM 销售明细表 GROUP BY CONVERT(VARCHAR(6),时间,112))T ORDER BY SaleTime SET @SQL=@SQL+'FROM 销售明细表 GROUP BY 门店名称' EXEC(@SQL)
这是我写的SQL:select a.branch_name, ( CASE left(b.oper_date,7) WHEN '2014-03' then count(b.flow_no) ELSE 1 END ) AS '2014年3月', ( CASE left(b.oper_date,7) when '2014-04' then count(b.flow_no) ELSE 1 END ) AS '2014年4月', ( CASE left(b.oper_date,7) when '2014-05' then count(b.flow_no) ELSE 1 END ) AS '2014年5月', ( CASE left(b.oper_date,7) when '2014-06' then count(b.flow_no) ELSE 1 END ) AS '2014年6月', ( CASE left(b.oper_date,7) when '2014-07' then count(b.flow_no) ELSE 1 END ) AS '2014年7月', ( CASE left(b.oper_date,7) when '2014-08' then count(b.flow_no) ELSE 1 END ) AS '2014年8月', ( CASE left(b.oper_date,7) when '2014-09' then count(b.flow_no) ELSE 1 END ) AS '2014年9月', ( CASE left(b.oper_date,7) when '2014-10' then count(b.flow_no) ELSE 1 END ) AS '2014年10月', ( CASE left(b.oper_date,7) when '2014-11' then count(b.flow_no) ELSE 1 END ) AS '2014年11月', ( CASE left(b.oper_date,7) when '2014-12' then count(b.flow_no) ELSE 1 END ) AS '2014年12月', ( CASE left(b.oper_date,7) when '2015-01' then count(b.flow_no) ELSE 1 END ) AS '2015年1月', ( CASE left(b.oper_date,7) when '2015-02' then count(b.flow_no) ELSE 1 END ) AS '2015年2月', ( CASE left(b.oper_date,7) when '2015-03' then count(b.flow_no) ELSE 1 END ) AS '2015年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-02 23:59:59' and a.branch_no=b.branch_no group by a.branch_name,b.oper_date
select b.flow_no,a.branch_name, ( CASE left(b.oper_date,7) WHEN '2014-03' then count(b.flow_no) ELSE 1 END ) AS '2014年3月', ( CASE left(b.oper_date,7) when '2014-04' then count(b.flow_no) ELSE 1 END ) AS '2014年4月', ( CASE left(b.oper_date,7) when '2014-05' then count(b.flow_no) ELSE 1 END ) AS '2014年5月', ( CASE left(b.oper_date,7) when '2014-06' then count(b.flow_no) ELSE 1 END ) AS '2014年6月', ( CASE left(b.oper_date,7) when '2014-07' then count(b.flow_no) ELSE 1 END ) AS '2014年7月', ( CASE left(b.oper_date,7) when '2014-08' then count(b.flow_no) ELSE 1 END ) AS '2014年8月', ( CASE left(b.oper_date,7) when '2014-09' then count(b.flow_no) ELSE 1 END ) AS '2014年9月', ( CASE left(b.oper_date,7) when '2014-10' then count(b.flow_no) ELSE 1 END ) AS '2014年10月', ( CASE left(b.oper_date,7) when '2014-11' then count(b.flow_no) ELSE 1 END ) AS '2014年11月', ( CASE left(b.oper_date,7) when '2014-12' then count(b.flow_no) ELSE 1 END ) AS '2014年12月', ( CASE left(b.oper_date,7) when '2015-01' then count(b.flow_no) ELSE 1 END ) AS '2015年1月', ( CASE left(b.oper_date,7) when '2015-02' then count(b.flow_no) ELSE 1 END ) AS '2015年2月', ( CASE left(b.oper_date,7) when '2015-03' then count(b.flow_no) ELSE 1 END ) AS '2015年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<= '2015-03-01 23:59:59' and a.branch_no=b.branch_no group by a.branch_name,b.flow_no,b.oper_date如何聚合一下?请指教。
就是加个SUM 或COUNT之类,但是你ELSE 1要去掉 类似这样SELECT 门店名称 ,SUM(CASE WHEN CONVERT(VARCHAR(6),时间,112)='201403'THEN 1 END)[2014年3月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),时间,112)='201404'THEN 1 END)[2014年4月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),时间,112)='201504'THEN 1 END)[2015年4月份单号总计] FROM 销售明细表 GROUP BY 门店名称
按照你的提示,我写了一下这个SQL: SELECT distinct b.flow_no, a.branch_name, SUM(CASE WHEN CONVERT(VARCHAR(6), b.oper_date,112)='201403'THEN 1 END)[2014年3月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6), b.oper_date,112)='201404'THEN 1 END)[2014年4月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6), b.oper_date,112)='201505'THEN 1 END)[2015年5月份单号总计] 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<= '2015-03-01 23:59:59' and a.branch_no=b.branch_no group by b.flow_no,a.branch_name,b.oper_date结果会把相同单号全部统计出来了,如下:A门店 030214030100014 2014-03-01 10:04:54:376 A门店 030214030100014 2014-03-01 10:04:54:376我只想只统计一个相同单号的总和就可以了。
我没明白你同单什么意思,你试下这种方式COUNT DISTINCTSELECT 门店名称 ,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 门店名称
当前的语句只能统计每个单号的合计数。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
类似这样 SELECT a.branch_name ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201403'THEN 1 END)[2014年3月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201404'THEN 1 END)[2014年4月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201405'THEN 1 END)[2014年5月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201406'THEN 1 END)[2014年6月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201407'THEN 1 END)[2014年7月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201408'THEN 1 END)[2014年8月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201409'THEN 1 END)[2014年9月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201410'THEN 1 END)[2014年10月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201411'THEN 1 END)[2014年11月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201412'THEN 1 END)[2014年12月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201401'THEN 1 END)[2014年1月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201402'THEN 1 END)[2015年2月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201403'THEN 1 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如果和你的表名列名都对上了,这次一个字都不用改 有什么问题,引用我的回复,这样我才看得到
类似这样 SELECT a.branch_name ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201403'THEN 1 END)[2014年3月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201404'THEN 1 END)[2014年4月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201405'THEN 1 END)[2014年5月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201406'THEN 1 END)[2014年6月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201407'THEN 1 END)[2014年7月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201408'THEN 1 END)[2014年8月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201409'THEN 1 END)[2014年9月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201410'THEN 1 END)[2014年10月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201411'THEN 1 END)[2014年11月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201412'THEN 1 END)[2014年12月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201401'THEN 1 END)[2014年1月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201402'THEN 1 END)[2015年2月份单号总计] ,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201403'THEN 1 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如果和你的表名列名都对上了,这次一个字都不用改 有什么问题,引用我的回复,这样我才看得到你好,我把你的语句执行了一下,数据统计了所有单号,而不是把重复的单号保留1行以及最终统计出来。
执行你写的语句,结果会把相同单号全部统计出来了,如下:A门店 030214030100014 2014-03-01 10:04:54:376 A门店 030214030100014 2014-03-01 10:04:54:376单号数量是2。按照以下的SQL语句,重复的单号只统计了1个是正确,但是只能统计每个单号的合计数,不能统计相应门店的相应月份的合计单号数量。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
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 也加进来,那就形似神非了,不知道在统计什么了
没明白,全为0的是什么然后总合计的话,在这地方,加这么一句 ,COUNT(DISTINCT b.flow_no)[总合计] FROM bi_t_branch_info a
我想,你数据表还有其它个月的数据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
我想,你数据表还有其它个月的数据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我想,你数据表还有其它个月的数据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可否把整行为0的屏蔽?
SET @SQL='SELECT 门店名称'
SELECT @SQL=@SQL+',SUM(CASE WHEN CONVERT(VARCHAR(6),时间,112)='''+SaleTime+'''THEN 1 END)['
+LEFT(SaleTime,4)+'年'+CAST(RIGHT(SaleTime,2)+0 AS VARCHAR(2))+'月份单号总计]'
FROM(SELECT CONVERT(VARCHAR(6),时间,112)SaleTime FROM 销售明细表 GROUP BY CONVERT(VARCHAR(6),时间,112))T
ORDER BY SaleTime
SET @SQL=@SQL+'FROM 销售明细表 GROUP BY 门店名称'
EXEC(@SQL)
统计2014年3月1号 到2015年3月1号的数据。
( CASE left(b.oper_date,7) when '2014-04' then count(b.flow_no) ELSE 1 END ) AS '2014年4月',
( CASE left(b.oper_date,7) when '2014-05' then count(b.flow_no) ELSE 1 END ) AS '2014年5月',
( CASE left(b.oper_date,7) when '2014-06' then count(b.flow_no) ELSE 1 END ) AS '2014年6月',
( CASE left(b.oper_date,7) when '2014-07' then count(b.flow_no) ELSE 1 END ) AS '2014年7月',
( CASE left(b.oper_date,7) when '2014-08' then count(b.flow_no) ELSE 1 END ) AS '2014年8月',
( CASE left(b.oper_date,7) when '2014-09' then count(b.flow_no) ELSE 1 END ) AS '2014年9月',
( CASE left(b.oper_date,7) when '2014-10' then count(b.flow_no) ELSE 1 END ) AS '2014年10月',
( CASE left(b.oper_date,7) when '2014-11' then count(b.flow_no) ELSE 1 END ) AS '2014年11月',
( CASE left(b.oper_date,7) when '2014-12' then count(b.flow_no) ELSE 1 END ) AS '2014年12月',
( CASE left(b.oper_date,7) when '2015-01' then count(b.flow_no) ELSE 1 END ) AS '2015年1月',
( CASE left(b.oper_date,7) when '2015-02' then count(b.flow_no) ELSE 1 END ) AS '2015年2月',
( CASE left(b.oper_date,7) when '2015-03' then count(b.flow_no) ELSE 1 END ) AS '2015年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-02 23:59:59' and a.branch_no=b.branch_no
group by
a.branch_name,b.oper_date
( CASE left(b.oper_date,7) when '2014-04' then count(b.flow_no) ELSE 1 END ) AS '2014年4月',
( CASE left(b.oper_date,7) when '2014-05' then count(b.flow_no) ELSE 1 END ) AS '2014年5月',
( CASE left(b.oper_date,7) when '2014-06' then count(b.flow_no) ELSE 1 END ) AS '2014年6月',
( CASE left(b.oper_date,7) when '2014-07' then count(b.flow_no) ELSE 1 END ) AS '2014年7月',
( CASE left(b.oper_date,7) when '2014-08' then count(b.flow_no) ELSE 1 END ) AS '2014年8月',
( CASE left(b.oper_date,7) when '2014-09' then count(b.flow_no) ELSE 1 END ) AS '2014年9月',
( CASE left(b.oper_date,7) when '2014-10' then count(b.flow_no) ELSE 1 END ) AS '2014年10月',
( CASE left(b.oper_date,7) when '2014-11' then count(b.flow_no) ELSE 1 END ) AS '2014年11月',
( CASE left(b.oper_date,7) when '2014-12' then count(b.flow_no) ELSE 1 END ) AS '2014年12月',
( CASE left(b.oper_date,7) when '2015-01' then count(b.flow_no) ELSE 1 END ) AS '2015年1月',
( CASE left(b.oper_date,7) when '2015-02' then count(b.flow_no) ELSE 1 END ) AS '2015年2月',
( CASE left(b.oper_date,7) when '2015-03' then count(b.flow_no) ELSE 1 END ) AS '2015年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<= '2015-03-01 23:59:59' and a.branch_no=b.branch_no group by
a.branch_name,b.flow_no,b.oper_date如何聚合一下?请指教。
pos_t_payflow 表结构:flow_no代表单号,branch_no代表门店编号,oper_date代表操作时间。
bi_t_branch_info表结构:branch_no代表门店编号,branch_name代表门店名称。门店名称 单号 时间
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-03-01 10:05:54:376
B门店 040215040200016 2015-03-02 10:05:54:376
C门店 050215040300016 2015-03-03 10:05:54:376最终需要实现的数据统计如下:
门店名称 2014年3月份单号总计 2014年4月份单号总计 2014年5月份单号总计 2014年6月份单号总计 2014年7月份单号总计 2014年8月份单号总计 2014年9月份单号总计 2014年10月份单号总计 2014年11月份单号总计 2014年12月份单号总计 2015年1月份单号总计 2015年2月份单号总计 2015年3月份单号总计
A门店 2 2 1
B门店 2 2 1
C门店 2 2 1
类似这样SELECT 门店名称
,SUM(CASE WHEN CONVERT(VARCHAR(6),时间,112)='201403'THEN 1 END)[2014年3月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),时间,112)='201404'THEN 1 END)[2014年4月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),时间,112)='201504'THEN 1 END)[2015年4月份单号总计]
FROM 销售明细表
GROUP BY 门店名称
SELECT distinct b.flow_no, a.branch_name,
SUM(CASE WHEN CONVERT(VARCHAR(6), b.oper_date,112)='201403'THEN 1 END)[2014年3月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6), b.oper_date,112)='201404'THEN 1 END)[2014年4月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6), b.oper_date,112)='201505'THEN 1 END)[2015年5月份单号总计]
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<= '2015-03-01 23:59:59' and a.branch_no=b.branch_no
group by
b.flow_no,a.branch_name,b.oper_date结果会把相同单号全部统计出来了,如下:A门店 030214030100014 2014-03-01 10:04:54:376
A门店 030214030100014 2014-03-01 10:04:54:376我只想只统计一个相同单号的总和就可以了。
,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 门店名称
当前的语句只能统计每个单号的合计数。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
bi_t_branch_info表结构:branch_no代表门店编号,branch_name代表门店名称。门店名称 单号 时间
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-03-01 10:05:54:376
B门店 040215040200016 2015-03-02 10:05:54:376
C门店 050215040300016 2015-03-03 10:05:54:376最终需要实现的数据统计如下:
门店名称 2014年3月份单号总计 2014年4月份单号总计 2014年5月份单号总计 2014年6月份单号总计 2014年7月份单号总计 2014年8月份单号总计 2014年9月份单号总计 2014年10月份单号总计 2014年11月份单号总计 2014年12月份单号总计 2015年1月份单号总计 2015年2月份单号总计 2015年3月份单号总计
A门店 2 2 1
B门店 2 2 1
C门店 2 2 1
SELECT a.branch_name
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201403'THEN 1 END)[2014年3月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201404'THEN 1 END)[2014年4月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201405'THEN 1 END)[2014年5月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201406'THEN 1 END)[2014年6月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201407'THEN 1 END)[2014年7月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201408'THEN 1 END)[2014年8月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201409'THEN 1 END)[2014年9月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201410'THEN 1 END)[2014年10月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201411'THEN 1 END)[2014年11月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201412'THEN 1 END)[2014年12月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201401'THEN 1 END)[2014年1月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201402'THEN 1 END)[2015年2月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201403'THEN 1 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如果和你的表名列名都对上了,这次一个字都不用改
有什么问题,引用我的回复,这样我才看得到
SELECT a.branch_name
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201403'THEN 1 END)[2014年3月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201404'THEN 1 END)[2014年4月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201405'THEN 1 END)[2014年5月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201406'THEN 1 END)[2014年6月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201407'THEN 1 END)[2014年7月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201408'THEN 1 END)[2014年8月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201409'THEN 1 END)[2014年9月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201410'THEN 1 END)[2014年10月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201411'THEN 1 END)[2014年11月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201412'THEN 1 END)[2014年12月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201401'THEN 1 END)[2014年1月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201402'THEN 1 END)[2015年2月份单号总计]
,SUM(CASE WHEN CONVERT(VARCHAR(6),b.oper_date,112)='201403'THEN 1 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如果和你的表名列名都对上了,这次一个字都不用改
有什么问题,引用我的回复,这样我才看得到你好,我把你的语句执行了一下,数据统计了所有单号,而不是把重复的单号保留1行以及最终统计出来。
A门店 030214030100014 2014-03-01 10:04:54:376单号数量是2。按照以下的SQL语句,重复的单号只统计了1个是正确,但是只能统计每个单号的合计数,不能统计相应门店的相应月份的合计单号数量。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
,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 也加进来,那就形似神非了,不知道在统计什么了
FROM bi_t_branch_info a
我加了COUNT(DISTINCT b.flow_no)[总合计]之后,发现统计出来的是相应门店所有的单号总计,而不是这个月的单号总计。
,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
,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我想,你数据表还有其它个月的数据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可否把整行为0的屏蔽?