• SQL查询本年每月的数据


    1. --一、以一行数据的形式,显示本年的12月的数据,本示例以2017年为例,根据统计日期字段判断,计算总和,查询语句如下:
    2. select
    3. sum(case when datepart(month,统计日期)=1 then 支付金额 else 0 end) as '1月',
    4. sum(case when datepart(month,统计日期)=2 then 支付金额 else 0 end) as '2月',
    5. sum(case when datepart(month,统计日期)=3 then 支付金额 else 0 end) as '3月',
    6. sum(case when datepart(month,统计日期)=4 then 支付金额 else 0 end) as '4月',
    7. sum(case when datepart(month,统计日期)=5 then 支付金额 else 0 end) as '5月',
    8. sum(case when datepart(month,统计日期)=6 then 支付金额 else 0 end) as '6月',
    9. sum(case when datepart(month,统计日期)=7 then 支付金额 else 0 end) as '7月',
    10. sum(case when datepart(month,统计日期)=8 then 支付金额 else 0 end) as '8月',
    11. sum(case when datepart(month,统计日期)=9 then 支付金额 else 0 end) as '9月',
    12. sum(case when datepart(month,统计日期)=10 then 支付金额 else 0 end) as '10月',
    13. sum(case when datepart(month,统计日期)=11 then 支付金额 else 0 end) as '11月',
    14. sum(case when datepart(month,统计日期)=12 then 支付金额 else 0 end) as '12月'
    15. from TM店铺整体月指标
    16. where datepart(year,统计日期)='2023'

    1. --二、根据当前日期,以列的数据形式,显示本年的12个月的数据,查询语句如下:
    2. select
    3. 统计日期=convert(varchar(10),dateadd(month, 0,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120)
    4. union all select date=convert(varchar(10),dateadd(month,1,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120)
    5. union all select date=convert(varchar(10),dateadd(month,2,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120)
    6. union all select date=convert(varchar(10),dateadd(month,3,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120)
    7. union all select date=convert(varchar(10),dateadd(month,4,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120)
    8. union all select date=convert(varchar(10),dateadd(month,5,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120)
    9. union all select date=convert(varchar(10),dateadd(month,6,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120)
    10. union all select date=convert(varchar(10),dateadd(month,7,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120)
    11. union all select date=convert(varchar(10),dateadd(month,8,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120)
    12. union all select date=convert(varchar(10),dateadd(month,9,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120)
    13. union all select date=convert(varchar(10),dateadd(month,10,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120)
    14. union all select date=convert(varchar(10),dateadd(month,11,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120)

    1. --二、具体应用示例:以2017为例,查询语句如下:
    2. with t as
    3. (
    4. select 统计日期=substring(convert(varchar(10),dateadd(month, 0,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120),6,2)
    5. union all select date=substring(convert(varchar(10),dateadd(month,1,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120),6,2)
    6. union all select date=substring(convert(varchar(10),dateadd(month,2,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120),6,2)
    7. union all select date=substring(convert(varchar(10),dateadd(month,3,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120),6,2)
    8. union all select date=substring(convert(varchar(10),dateadd(month,4,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120),6,2)
    9. union all select date=substring(convert(varchar(10),dateadd(month,5,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120),6,2)
    10. union all select date=substring(convert(varchar(10),dateadd(month,6,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120),6,2)
    11. union all select date=substring(convert(varchar(10),dateadd(month,7,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120),6,2)
    12. union all select date=substring(convert(varchar(10),dateadd(month,8,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120),6,2)
    13. union all select date=substring(convert(varchar(10),dateadd(month,9,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120),6,2)
    14. union all select date=substring(convert(varchar(10),dateadd(month,10,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120),6,2)
    15. union all select date=substring(convert(varchar(10),dateadd(month,11,convert(varchar(10),DATEADD(year, DATEDIFF(year,0,getdate()), 0),120)),120),6,2)
    16. )
    17. select id=ROW_NUMBER()OVER(ORDER BY t1.统计日期),
    18. 统计日期=t1.统计日期+'月',
    19. 支付金额=sum(isnull(t2.支付金额,0))
    20. from t t1
    21. left join
    22. (
    23. select substring(convert(varchar,统计日期,120),6,2) as 统计日期,sum(支付金额) as 支付金额--count(*) as counts
    24. from TM店铺整体月指标
    25. where datepart(year,统计日期)='2023'
    26. group by substring(convert(varchar,统计日期,120),6,2)
    27. ) t2
    28. on t1.统计日期= t2.统计日期
    29. group by t1.统计日期

    1. --sql 查询每一年1到12月的数据
    2. Select Year(统计日期) as 年份,Month(统计日期) as 月份,SUM(支付金额) as 支付金额
    3. FROM TM店铺整体月指标
    4. Group by Year(统计日期),Month(统计日期)

    1. --2、每月
    2. select year(统计日期) 年,month(统计日期) 月,
    3. sum(支付金额) as 支付金额, sum(老买家支付金额) as 老买家支付金额,sum(支付件数) as 支付件数,
    4. sum(直通车消耗) as 直通车消耗,sum(淘宝客佣金) as 淘宝客佣金,sum(钻石展位消耗) as 钻石展位消耗,
    5. sum(成功退款金额) as 成功退款金额,
    6. sum(PC端支付金额) as PC端支付金额,sum(无线端支付金额) as 无线端支付金额,
    7. sum(PC端支付件数) as PC端支付件数,sum(无线端支付件数) as 无线端支付件数
    8. from TM店铺整体日指标
    9. WHERE
    10. YEAR (统计日期) = 2023 -- 这里假设你要查 2023年的每月的统计。
    11. group by year(统计日期),month(统计日期)

    1. --按年统计
    2. SELECT year(统计日期) 年次,
    3. sum(支付金额) as 支付金额, sum(老买家支付金额) as 老买家支付金额,sum(支付件数) as 支付件数,
    4. sum(直通车消耗) as 直通车消耗,sum(淘宝客佣金) as 淘宝客佣金,sum(钻石展位消耗) as 钻石展位消耗,
    5. sum(成功退款金额) as 成功退款金额,
    6. sum(PC端支付金额) as PC端支付金额,sum(无线端支付金额) as 无线端支付金额,
    7. sum(PC端支付件数) as PC端支付件数,sum(无线端支付件数) as 无线端支付件数
    8. FROM TM店铺整体月指标
    9. GROUP BY year(统计日期)

    1. --按月逐级累计查询语句:
    2. SELECT a.统计日期, SUM(b.支付金额) as 支付金额 FROM
    3. (SELECT 统计日期, SUM(支付金额) 支付金额 FROM TM店铺整体月指标 GROUP BY 统计日期) a
    4. INNER JOIN
    5. (SELECT 统计日期, SUM(支付金额) 支付金额 FROM TM店铺整体月指标 GROUP BY 统计日期) b
    6. ON a.统计日期 >= b.统计日期
    7. GROUP BY a.统计日期
    8. ORDER BY a.统计日期

    1. --按周统计 (年度周次)
    2. SELECT datepart(week, 统计日期) 周次, count(1) 销售天数,
    3. sum(支付金额) as 支付金额, sum(老买家支付金额) as 老买家支付金额,sum(支付件数) as 支付件数,
    4. sum(直通车消耗) as 直通车消耗,sum(淘宝客佣金) as 淘宝客佣金,sum(钻石展位消耗) as 钻石展位消耗,
    5. sum(成功退款金额) as 成功退款金额,
    6. sum(无线端支付金额) as 无线端支付金额,sum(PC端支付金额) as PC端支付金额,
    7. sum(无线端支付件数) as 无线端支付件数, sum(PC端支付件数) as PC端支付件数
    8. FROM TM店铺整体日指标
    9. WHERE year(统计日期)=year(getdate())
    10. GROUP BY datepart(week, 统计日期)

    1. --按周统计 (月份周次)
    2. SELECT weekName 周次,count(1) 销售次数,
    3. sum(支付金额) as 支付金额, sum(老买家支付金额) as 老买家支付金额,sum(支付件数) as 支付件数,
    4. sum(直通车消耗) as 直通车消耗,sum(淘宝客佣金) as 淘宝客佣金,sum(钻石展位消耗) as 钻石展位消耗,
    5. sum(成功退款金额) as 成功退款金额,
    6. sum(无线端支付金额) as 无线端支付金额,sum(PC端支付金额) as PC端支付金额,
    7. sum(无线端支付件数) as 无线端支付件数, sum(PC端支付件数) as PC端支付件数
    8. from (
    9. SELECT cast(datepart(month,统计日期) as varchar(2)) + '月第'+ cast((datepart(week,统计日期) - datepart(week,convert(varchar(7),统计日期,120) + '-01') + 1) as varchar(2)) + '周'
    10. weekName,支付金额,老买家支付金额,支付件数,直通车消耗,淘宝客佣金,钻石展位消耗,成功退款金额,无线端支付金额,PC端支付金额,无线端支付件数,PC端支付件数
    11. FROM TM店铺整体日指标
    12. WHERE year(统计日期)=year(getdate())
    13. )tb
    14. GROUP BY weekName

    1. --按季统计
    2. SELECT datepart(quarter, 统计日期) 季次, count(1) 销售次数,
    3. sum(支付金额) as 支付金额, sum(老买家支付金额) as 老买家支付金额,sum(支付件数) as 支付件数,
    4. sum(直通车消耗) as 直通车消耗,sum(淘宝客佣金) as 淘宝客佣金,sum(钻石展位消耗) as 钻石展位消耗,
    5. sum(成功退款金额) as 成功退款金额,
    6. sum(无线端支付金额) as 无线端支付金额,sum(PC端支付金额) as PC端支付金额,
    7. sum(无线端支付件数) as 无线端支付件数, sum(PC端支付件数) as PC端支付件数
    8. FROM TM店铺整体月指标
    9. WHERE year(统计日期)=year(getdate())
    10. GROUP BY datepart(quarter, 统计日期)

  • 相关阅读:
    为什么要选择华为 HCIE-Security 课程?
    Swift 周报 第十七期
    【STL***list容器三】
    在IDEA中如何新建一个web工程
    DIXml v5.21.0 for Delphi 11
    C现代方法(第17章)笔记——指针的高级应用
    动物园(zoo)
    最长公共子串 动态规划
    南大通用GBase 8a MPP Cluster管理工具简介
    移动端适配vue小练习
  • 原文地址:https://blog.csdn.net/zgscwxd/article/details/132652894