sql - 将 CASE 语句与 ROLL UP 函数一起使用
问题描述
我将几个 DischargeType 值归为一个名为“上诉”的类别。这工作正常,但聚合字段 MIN(DateReceived) 导致结果为每个 Appeals 类型生成 1 DateReceived 值,而我只想要一个用于整个 Appeals 类别的值。我以为我可以在 GROUP BY 子句中添加相同的 CASE 语句,但我不知道如何使用 ROLL UP 函数执行此操作。最后一行中的 NULL 值是总计行。谢谢
<PRE>
CREATE PROCEDURE [dbo].[p_ReportMonthlySAEProcessing]
@StartDate smalldatetime = NULL,
@EndDate smalldatetime = NULL
AS
BEGIN
SELECT
CASE
WHEN DischargeType = 'dqs' THEN 'Disqualifying Status'
WHEN DischargeType = 'fraud' THEN 'Fraud'
WHEN DischargeType = 'id theft' THEN 'ID Theft'
WHEN DischargeType = 'unenforceable' THEN 'Unenforceable'
WHEN DischargeType = 'unp' THEN 'Unpaid Refund'
WHEN DischargeType = 'uns' THEN 'Unauthorized Signature/Payment'
WHEN DischargeType IN ('atb appeal', 'cls appeal','dqs appeal','id
theft appeal','unp appeal','uns appeal') THEN 'Appeals'
END AS DischargeType
,SUM(CASE WHEN (DateReceived > @StartDate AND DateReceived < DATEADD(dd,
1, @EndDate)) THEN 1 ELSE 0 END) AS Claims_Received
,SUM(CASE WHEN (DateCompleted > @StartDate AND DateCompleted <
DATEADD(dd, 1, @EndDate)) THEN 1 ELSE 0 END) AS Claims_Completed
,SUM(CASE WHEN DateCompleted IS NULL THEN 1 ELSE 0 END) AS Claims_Pending
,MIN(DateReceived) AS [Oldest_Claim]
FROM
Claims
GROUP BY
DischargeType WITH ROLLUP
ORDER BY
CASE WHEN DischargeType IS NULL THEN 1 ELSE 0 END, DischargeType</pre>
解决方案
WITH claimsGrp AS (
SELECT
CASE
WHEN DischargeType = 'dqs' THEN 'Disqualifying Status'
WHEN DischargeType = 'fraud' THEN 'Fraud'
WHEN DischargeType = 'id theft' THEN 'ID Theft'
WHEN DischargeType = 'unenforceable' THEN 'Unenforceable'
WHEN DischargeType = 'unp' THEN 'Unpaid Refund'
WHEN DischargeType = 'uns' THEN 'Unauthorized Signature/Payment'
WHEN DischargeType IN ('atb appeal', 'cls appeal','dqs appeal','id
theft appeal','unp appeal','uns appeal') THEN 'Appeals'
END AS DischargeType
,
CASE WHEN (DateReceived > @StartDate AND DateReceived < DATEADD(dd,
1, @EndDate)) THEN 1 ELSE 0 END AS Claims_Received
,CASE WHEN (DateCompleted > @StartDate AND DateCompleted <
DATEADD(dd, 1, @EndDate)) THEN 1 ELSE 0 END AS Claims_Completed
,CASE WHEN DateCompleted IS NULL THEN 1 ELSE 0 END AS Claims_Pending
,DateReceived AS [Oldest_Claim]
FROM
Claims)
SELECT claimsGrp.DischargeType,
SUM(claimsGrp.Claims_Received),
SUM(claimsGrp.Claims_Completed),
SUM(claimsGrp.Claims_Pending)
min([Oldest_Claim])
FROM claimsGrp
GROUP BY
DischargeType WITH ROLLUP
ORDER BY
CASE WHEN DischargeType IS NULL THEN 1 ELSE 0 END, DischargeType
推荐阅读
- webpack - 我可以使用 Webpack v3 减少我的包大小吗?
- json - 通过 Cloudfront 在 cloudformation 中使用 Route53 模板
- javascript - 条件 html 元素仅临时显示
- laravel - 如何使用 vscode 查看 $request 及其子方法中的所有可用方法?
- javascript - Discord.js V12 如何从 args 中删除提到的用户?
- javascript - 如何在博客上按月调用 javascript 函数
- ios - 为什么自动分配的经纬度在 SwiftUI 中不起作用?
- python - 你怎么称呼论点?
- python - 不能对来自 PIL lib 的 png 文件使用 Image.putalpha()。OSError:无法将模式 PA 写入 PNG
- java - 在recyclerview中从firebase获取数据时一次又一次地获取重复数据