sql-server - 在子查询中聚合分组依据
问题描述
尝试在一列中返回每个特定销售人员的年度销售额,并在下一列中返回总销售额的百分比。
子查询应返回所有销售额的总计,因此可以计算百分比。但是百分比是错误的,因为我无法汇总 OrderDate,因为这样它就不会在 join 语句中被识别(无法按 YEAR(OrderDate)分组。任何见解都会很棒。
SELECT Year(t1.OrderDate) as SalesYear, sum(SubTotal+TaxAmt) as Sales,
sum(SubTotal+TaxAmt) / sum(YearlyGrandTotal) AS [Percent]
FROM [AdventureWorks2017].[Sales].[SalesOrderHeader] t1
INNER JOIN (
SELECT OrderDate,Year(OrderDate) as O, sum(SubTotal+TaxAmt) as
YearlyGrandTotal
FROM Sales.SalesOrderHeader
GROUP BY (OrderDate)
) AS [Total] ON t1.OrderDate = Total.OrderDate
where SalesPersonID = 275
GROUP BY Year(t1.OrderDate)
解决方案
使用group by year(orderdate)
get thesales
和salespersonid = 275
theyearlygrandtotal
并将其用作子查询来计算百分比:
select
t.salesyear,
t.sales,
100.0 * t.sales / t.yearlygrandtotal percentage
from (
select
year(orderdate) salesyear,
sum(case when salespersonid = 275 then subtotal + taxamt else 0 end) sales,
sum(subtotal + taxamt) yearlygrandtotal
from [AdventureWorks2017].[Sales].[SalesOrderHeader]
group by year(orderdate)
) t
推荐阅读
- python - 如何只保存包含多行的变量的第一行和第二行?
- message-queue - 队列中有多个参与者,一个如何处理它?
- typescript - 使用 C3/D3 图形库的 Ionic 应用程序的 TypeScript 构建错误
- macos - 在没有 fink 的情况下在 mac 上安装底图(我尝试了所有可以用谷歌搜索的东西)
- vba - VBA 的 Worksheet_Change 函数使用 Intersect 方法与 Cells 作为范围定义器
- vuetify.js - 更改 v-toolbar-side-icon 使用的图标?
- html - Html在错误的位置显示行
- reporting-services - 如何在组级列上正确设置 SUM AGGREGATE
- material-design - 如何在移动视图上隐藏 Material-Ui Mini 变体抽屉
- python - 如何使用索引在 python 中使用整数向字符串添加空格?