sql - SQL 将每个月的平均值并排放在列中
问题描述
我有两个查询计算旧折扣和新折扣之间的平均值。我正在计算每月的平均值,我想知道如何将这些值并排放置:
这是我的查询:
Select AVG(ABS(NewDiscount - OldDiscount)) AS [Average Discount Change in February]
From DiscountChange
where MONTH(ChangeDate) = 2
and YEAR(ChangeDate) = 2021
Select AVG(ABS(NewDiscount - OldDiscount)) AS [Average Discount Change in January]
From DiscountChange
where MONTH(ChangeDate) = 1
and YEAR(ChangeDate) = 2021
我想得到的输出是:
[Average Discount Change in February] | [Average Discount Change in January]
这是 DiscountChange 表的架构:
Create Table DiscountChange
(
DiscountChangeId Decimal(12) NOT NULL PRIMARY KEY
, CouponId Decimal(12) NOT NULL FOREIGN KEY REFERENCES Coupon(CouponId)
, OldDiscount MONEY NOT NULL
, NewDiscount MONEY NOT NULL
, ChangeDate DATE NOT NULL
)
如何修改我的查询以实现上述输出?
提前致谢
解决方案
您可以使用条件聚合:
Select AVG(CASE WHEN MONTH(ChangeDate) = 1 THEN ABS(NewDiscount - OldDiscount) END),
AVG(CASE WHEN MONTH(ChangeDate) = 2 THEN ABS(NewDiscount - OldDiscount) END)
From DiscountChange
where ChangeDate >= '2021-01-01' AND
ChangeDate < '2021-03-01'
推荐阅读
- excel - Excel公式分割文本
- ruby-on-rails - Skyscanner Flight search API 与 Ruby on rails6
- python - 根据列值组合行和列名(python)
- asp.net-mvc-5 - 注销重定向到 MVC5 中的登录页面
- c# - 未调用 xUnit 设置函数
- javascript - 在 JavaScript 中使用多个分隔符进行字符串拆分
- java - 如何通过 JNI 将 C 字符串表情符号传递给 Java
- flutter - 在获取后台推送通知时自动在 Flutter 应用中打开屏幕
- angularjs - Angularjs ng包含在使用它在索引文件中显示导航栏时不起作用
- java - 错误:无法找到或加载主类 org.apache.gobblin.runtime.cli.GobblinCli