sql - 通过 SQL 生成每个客户每月的销售报告,例如按两列分组并对第三列求和
问题描述
我很少编写 SQL(Azure SQL),但我试图生成每个客户每月的销售额。
顾客:
|Username |ID |
|user1 |1 |
|user2 |2 |
|user3 |3 |
命令:
|CustomerId |Month |Total |
|1 |1 |275 |
|1 |1 |10 |
|2 |1 |100 |
|1 |3 |150 |
|2 |2 |150 |
|2 |2 |65 |
|3 |2 |150 |
我要生产
|Username |Month1Total |Month2Total | Month3Total |
|user1 |285 |275 | 150 |
|user2 |100 |215 | 0 |
|user3 |0 |150 | 0 |
我可以做到以下几点
SELECT customerTable.Username Username, SUM(orderTable.OrderTotal) TotalMay
FROM "Order" orderTable
JOIN Customer customerTable ON orderTable.CustomerId = customerTable.Id
WHERE DATENAME(Month, (orderTable.PaidDateUTC)) = 'May'
GROUP BY Username
这会给我每个月的输出。但是我不知道如何循环这个,每月做一次,然后按用户名分组。
解决方案
如果你想每个月有一个单独的列,那么试试这个
SELECT customerTable.Username Username
,SUM(iif(ordertable.[month] = 1,orderTable.OrderTotal,0)) TotalJan
,SUM(iif(ordertable.[month] = 2,orderTable.OrderTotal,0)) TotalFeb
,SUM(iif(ordertable.[month] = 3,orderTable.OrderTotal,0)) TotalMar
,SUM(iif(ordertable.[month] = 4,orderTable.OrderTotal,0)) TotalApr
,SUM(iif(ordertable.[month] = 5,orderTable.OrderTotal,0)) TotalMay
FROM "Order" orderTable
JOIN Customer customerTable ON orderTable.CustomerId = customerTable.Id
GROUP BY Username
应该很容易添加剩余的月份
推荐阅读
- php - 我需要一种方法来从这个 php 数组中找到五个俱乐部
- java - MapperRegistry 不知道 Mapper 文件
- python - 用空字典填充的 Python3 列表
- c++ - 如何修复虚幻引擎 4 中的“不允许指向不完整类类型的指针”错误
- bash - 为什么在条件中打印的 null 与文字 null 的处理方式不同?
- android - Android 上的增量机器学习
- graphql - GraphQL:一个接口可以用来统一两个等价属性名称不同的类型吗?
- css - 如何在导航栏中将按钮浮动到右侧,以免影响主导航栏?
- angular - 尝试使用对象属性访问文档信息
- javascript - componentDidMount() 中的“这是未定义”错误