sql - 使用 CASE 语句对 2 行求和
问题描述
我想显示Subscriptional行的 SUM 并显示为一个Subscriptional。我的脚本如下所示:
DECLARE @DATENOW datetime
SET @DATENOW = Convert(DateTime, DATEDIFF(DAY, 0, GETDATE()))
use ews
Select CASE
WHEN ot.PaymentType=0
THEN 'Transactional - '
ELSE 'Subscriptional - '
End as 'Payment Type',
count (distinct o.OrderNumber) as 'Count' from [order] AS o WITH (NOLOCK) LEFT OUTER JOIN
OrderProducts AS op WITH (NOLOCK) ON o.OrderNumber = op.OrderNumber LEFT OUTER JOIN
OrderTransaction AS ot WITH (NOLOCK) ON o.OrderNumber = ot.OrderNumber
where o.Datecreated >=DATEADD(D,-1,@DATENOW )
AND o.Datecreated <=DATEADD(ms,-3,@DATENOW )
AND o.status not like'%Deleted%'
group by ot.PaymentType
UNION
SELECT 'Deleted', count(*)
from [order] AS o WITH (NOLOCK) LEFT OUTER JOIN
OrderProducts AS op WITH (NOLOCK) ON o.OrderNumber = op.OrderNumber LEFT OUTER JOIN
OrderTransaction AS ot WITH (NOLOCK) ON o.OrderNumber = ot.OrderNumber
where o.Datecreated >=DATEADD(D,-1,@DATENOW )
AND o.Datecreated <=DATEADD(ms,-3,@DATENOW )
and o.status like'%Deleted%'
group by ot.paymenttype
这是原始结果,它显示事务性 STD 和 WB 在第二个结果中求和,但订阅 SCR 和 SSR 没有。我希望将第二个结果中的订阅 SSR 和 SCR 相加。
即
订阅 - 6
交易 - 26
解决方案
我将原始查询更改为子查询,并在子查询之后将组移动。修复列 CountOrder 的总和。
SELECT [Payment Type], SUM([CountOrder]) FROM (
SELECT CASE
WHEN ot.paymenttype = 0 THEN 'Transactional - '
ELSE 'Subscriptional - '
END AS [Payment Type],
Count (DISTINCT o.ordernumber) AS [CountOrder]
FROM [order] AS o WITH (nolock)
LEFT OUTER JOIN orderproducts AS op WITH (nolock)
ON o.ordernumber = op.ordernumber
LEFT OUTER JOIN ordertransaction AS ot WITH (nolock)
ON o.ordernumber = ot.ordernumber
WHERE o.datecreated >= Dateadd(d, -1, @DATENOW)
AND o.datecreated <= Dateadd(ms, -3, @DATENOW)
AND o.status NOT LIKE'%Deleted%'
UNION
SELECT 'Deleted' AS [Payment Type],
Count(*) AS [CountOrder]
FROM [order] AS o WITH (nolock)
LEFT OUTER JOIN orderproducts AS op WITH (nolock)
ON o.ordernumber = op.ordernumber
LEFT OUTER JOIN ordertransaction AS ot WITH (nolock)
ON o.ordernumber = ot.ordernumber
WHERE o.datecreated >= Dateadd(d, -1, @DATENOW)
AND o.datecreated <= Dateadd(ms, -3, @DATENOW)
AND o.status LIKE'%Deleted%'
)
GROUP BY [Payment Type]
推荐阅读
- class - 潜在类别分析
- php - 表单标签自动关闭(无父关闭)
- reactjs - 如何在 React 中删除 Antd v4 未使用的代码
- c# - c# Paypal 智能按钮服务器端集成 - 等待.......不断等待
- python - 使用与原始 np.linspace 相同的点创建“更密集”的 np.linspace
- python - Python 部分函数重载
- swift - 如何为 SwiftUI InputField 编写 UI 测试
- javascript - Vue 组件在“手动”多次使用时不会呈现......但在循环重复时有效
- reactjs - 【React chart.js】如何使用地图功能向雷达图添加多个数据
- stata - Stata:如何在两个变量之间添加交互?