统计分析的动态行,动态列,只是31天区间内的

SELECT
	t4.a  as a ,
	IFNULL(SUM( CASE WHEN t4.DAY = '01' THEN COUNT END ),0) AS first,
	IFNULL(SUM( CASE WHEN t4.DAY = '02' THEN COUNT END ),0) AS second,
	IFNULL(SUM( CASE WHEN t4.DAY = '03' THEN COUNT END ),0) AS third,
	IFNULL(SUM( CASE WHEN t4.DAY = '04' THEN COUNT END ),0) AS fourth,
	IFNULL(SUM( CASE WHEN t4.DAY = '05' THEN COUNT END ),0) AS fifth,
	IFNULL(SUM( CASE WHEN t4.DAY = '06' THEN COUNT END ),0) AS sixth,
	IFNULL(SUM( CASE WHEN t4.DAY = '07' THEN COUNT END ),0) AS seventh,
	IFNULL(SUM( CASE WHEN t4.DAY = '08' THEN COUNT END ),0) AS eighth,
	IFNULL(SUM( CASE WHEN t4.DAY = '09' THEN COUNT END ),0) AS ninth,
	IFNULL(SUM( CASE WHEN t4.DAY = '10' THEN COUNT END ),0) AS tenth,
	IFNULL(SUM( CASE WHEN t4.DAY = '11' THEN COUNT END ),0) AS eleventh,
	IFNULL(SUM( CASE WHEN t4.DAY = '12' THEN COUNT END ),0) AS twelfth,
	IFNULL(SUM( CASE WHEN t4.DAY = '13' THEN COUNT END ),0) AS thirteenth,
	IFNULL(SUM( CASE WHEN t4.DAY = '14' THEN COUNT END ),0) AS fourteenth,
	IFNULL(SUM( CASE WHEN t4.DAY = '15' THEN COUNT END ),0) AS fifteenth,
	IFNULL(SUM( CASE WHEN t4.DAY = '16' THEN COUNT END ),0) AS sixteenth,
	IFNULL(SUM( CASE WHEN t4.DAY = '17' THEN COUNT END ),0) AS seventeenth,
	IFNULL(SUM( CASE WHEN t4.DAY = '18' THEN COUNT END ),0) AS eighteenth,
	IFNULL(SUM( CASE WHEN t4.DAY = '19' THEN COUNT END ),0) AS nineteenth,
	IFNULL(SUM( CASE WHEN t4.DAY = '20' THEN COUNT END ),0) AS twentieth,
	IFNULL(SUM( CASE WHEN t4.DAY = '21' THEN COUNT END ),0) AS twentyFirst,
	IFNULL(SUM( CASE WHEN t4.DAY = '22' THEN COUNT END ),0) AS twentySecond,
	IFNULL(SUM( CASE WHEN t4.DAY = '23' THEN COUNT END ),0) AS twentyThird,
	IFNULL(SUM( CASE WHEN t4.DAY = '24' THEN COUNT END ),0) AS twentyFourth,
	IFNULL(SUM( CASE WHEN t4.DAY = '25' THEN COUNT END ),0) AS twentyFifth,
	IFNULL(SUM( CASE WHEN t4.DAY = '26' THEN COUNT END ),0) AS twentySixth,
	IFNULL(SUM( CASE WHEN t4.DAY = '27' THEN COUNT END ),0) AS twentySeventh,
	IFNULL(SUM( CASE WHEN t4.DAY = '28' THEN COUNT END ),0) AS twentyEighth,
	IFNULL(SUM( CASE WHEN t4.DAY = '29' THEN COUNT END ),0) AS twentyNinth,
	IFNULL(SUM( CASE WHEN t4.DAY = '30' THEN COUNT END ),0) AS thirty,
	IFNULL(SUM( CASE WHEN t4.DAY = '31' THEN COUNT END ),0) AS thirtyFirst  
FROM
	(
	SELECT
		t3.date,
		SUBSTR(
			t3.date 
		FROM
		LENGTH( t3.date )- 1 FOR LENGTH( t3.date )) AS DAY,
		t2.a,
		t2.b,
		t2.COUNT 
	FROM
		(
		SELECT
			@date := DATE_ADD( @date, INTERVAL + 1 DAY ) AS date 
		FROM
			( SELECT @date := DATE_ADD( '2021-11-15', INTERVAL - 1 DAY ) FROM test01  LIMIT 31 ) time 
		) t3
		LEFT JOIN (
		SELECT
			DATE_FORMAT( t1.CREATE_TIME, '%Y-%m-%d' ) AS createTime,
			t1.a  AS a,
			t1.b AS b,
			COUNT(*) AS COUNT 
		FROM
			test01 t1 
			LEFT JOIN test02 t6 ON t1.DEMAND_ORDER_NUM =t6.DEMAND_ORDER_NUM
			WHERE 1=1  													
		GROUP BY
			DATE_FORMAT( t1.CREATE_TIME, '%Y-%m-%d' ),
			t1.PRODUCT_NUM 
		) t2 ON t3.date = t2.createTime 
	) t4 
	WHERE t4.PRODUCT_NAME is not null
GROUP BY
t4.PRODUCT_NAME 

有更好的方法 希望老铁们附个链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值