按不同值分组
Group by unlike values
我正在尝试创建一个根据报告类型显示行数的报告。我正在按报告类型分组,但某些报告类型具有特定的名称,我想将它们组合在一个列表中。
例如:Urgent Care
报告可以有 Urgent Care
、SD494
、SD510
、SD546
等多种类型。我希望所有 SD###
都显示在 Urgent Care
下方,而不是单独列出。与 OP Notes
相同,它们可以是 OP Note
、SD805
、polysomnography
等。我想要 OP Notes
以下的那些,但都在一份报告中。我目前有大约 20 种不同的报告,我可以 运行 分别针对每种报告类型。
我怎样才能完成这个任务?
declare @officeID int = 93;
declare @startDate datetime = '6/01/2015';
declare @endDate datetime = '07/01/2015';
select (r.reporttype),
sum(cast(round(r.transcriptionlinecount,2) as decimal(8,2))) as "Bill Lines",
(cast(round(sum(r.transcriptionlinecount) * .13,2) as decimal(8,2))) as "Amount"
from rptlinecountinfo as r
join dictation as d on d.dictationID = r.dictationID
where
d.officeID = @officeID
and r.finishedtime between @startDate and @endDate
and (d.dictationStatus != 'D' and d.dictationStatus != 'Q')
group by r.reporttype
结果如下:(我添加了一个编号列,因此它不是段落形式)
- ASC 术前咨询 1848.96 240.36
- 听力报告 4403.73 572.48
- 心导管 452.26 58.79
- 冒号 539 操作注释 117.49 15.27
- 结肠镜检查 - 操作说明 118.11 15.35
- 结肠镜检查操作说明 54.88 7.13
- 咨询 3219.01 418.47
- CPAP 滴定 1802.61 234.34
- 出院总结 5259.79 683.77
- EGD - 操作说明 316.66 41.17
- EGD 537 操作说明 178.71 23.23
- EGD-操作说明 194.75 25.32
- 电生理报告 1679.79 218.37
- ER 录取 39402.45 5122.32
- ER 格式 150642.53 19583.53
- ERCP-操作说明 108.88 14.15
- 医院课程 5344.91 694.84
- 多学科肿瘤学 272.38 35.41
- OP 注释 32437.7 4216.9
- 操作说明 - SD698 57.66 7.5
- 疼痛门诊信 32.71 4.25
- 疼痛门诊报告 6.71 0.87
- 疼痛诊所 SD1020 37.75 4.91
- PHP 出院总结 336.81 43.79
- 下午住院咨询 1602.96 208.38
- 多导睡眠图 2466.16 320.6
- 术前咨询 30812.45 4005.62
- SD288 初始伤害 6398.55 831.81
- SD289跟进 2893.45 376.15
- SD289 跟进 2498.36 324.79
- SD488 OP 注释 48.86 6.35
- SD496 - 紧急护理 32.34 4.2
- SD503 - 紧急护理 40.17 5.22
- SD504 - 紧急护理 40.54 5.27
- SD509 - 紧急护理 75.95 9.87
- SD541 - 紧急护理 193.14 25.11
- SD594 - 紧急护理 42.89 5.58
- SD606 - 紧急护理 43.31 5.63
- 睡眠 - MSLT 85.53 11.12
- 睡信4505.21 585.68
- 睡眠报告 25243.47 3281.65
- 演讲报告 357.73 46.5
- STAT 出院总结 1148.06 149.25
- 外科住院医生临床笔记 1961.71 255.02
- 紧急护理 30221.61 3928.81
- 紧急护理 - SD494 227.37 29.56
- 紧急护理 - SD496 37.17 4.83
- 紧急护理 - SD503 202.07 26.27
- 紧急护理 - SD504 117.74 15.31
- 紧急护理 - SD508 67.97 8.84
- 紧急护理 - SD509 60.1 7.81
- 紧急护理 - SD510 33.57 4.36
- 紧急护理 - SD541 47.4 6.16
- 紧急护理 - SD546 27.77 3.61
- 紧急护理 - SD594 40.17 5.22
在大多数数据库中(你没有指定你的),只需使用 CASE
语句按照你想要的方式对值进行分组,然后在你的两个数据库中使用相同的 CASE
语句SELECT
和 GROUP BY
子句。
入门指南:
SELECT CASE WHEN r.reporttype LIKE 'SD%' THEN 'Urgent Care'
WHEN r.reporttype IN ('OP Note','SD805','polysomnography') THEN 'OP Notes'
ELSE r.reporttype END AS reporttype,
sum(cast(round(r.transcriptionlinecount,2) as decimal(8,2))) as "Bill Lines",
(cast(round(sum(r.transcriptionlinecount) * .13,2) as decimal(8,2))) as "Amount"
from rptlinecountinfo as r
join dictation as d on d.dictationID = r.dictationID
where
d.officeID = @officeID
and r.finishedtime between @startDate and @endDate
and (d.dictationStatus != 'D' and d.dictationStatus != 'Q')
group by CASE WHEN r.reporttype LIKE 'SD%' THEN 'Urgent Care'
WHEN r.reporttype IN ('OP Note','SD805','polysomnography') THEN 'OP Notes'
ELSE r.reporttype END
我应该警告你,CASE
语句中的上述逻辑已经被破坏了。原因是你的要求不一致
一方面,您说所有遵循此模式 SD###
的报告类型都应映射到 Urgent Care
。但是 SD805
呢?您说您希望将其映射到 OP Notes
,但根据您的规范,它作为 Urgent Care
也是有效的。所以你必须弄清楚在这种情况下你真正想要的是什么。如果你只有一个例外,那么也许你需要做的就是重新排序条件,以便首先检查例外情况。
此外,为了表示您的 SD###
要求,我将其翻译成非常标准的 LIKE 'SD%'
,它也可能匹配 SD5
或 SD
等模式,或者SDDFGDFG
。如果这不是您想要的,请为您的数据库寻找合适的正则表达式语句,并将其更改为该语句。
我正在尝试创建一个根据报告类型显示行数的报告。我正在按报告类型分组,但某些报告类型具有特定的名称,我想将它们组合在一个列表中。
例如:Urgent Care
报告可以有 Urgent Care
、SD494
、SD510
、SD546
等多种类型。我希望所有 SD###
都显示在 Urgent Care
下方,而不是单独列出。与 OP Notes
相同,它们可以是 OP Note
、SD805
、polysomnography
等。我想要 OP Notes
以下的那些,但都在一份报告中。我目前有大约 20 种不同的报告,我可以 运行 分别针对每种报告类型。
我怎样才能完成这个任务?
declare @officeID int = 93;
declare @startDate datetime = '6/01/2015';
declare @endDate datetime = '07/01/2015';
select (r.reporttype),
sum(cast(round(r.transcriptionlinecount,2) as decimal(8,2))) as "Bill Lines",
(cast(round(sum(r.transcriptionlinecount) * .13,2) as decimal(8,2))) as "Amount"
from rptlinecountinfo as r
join dictation as d on d.dictationID = r.dictationID
where
d.officeID = @officeID
and r.finishedtime between @startDate and @endDate
and (d.dictationStatus != 'D' and d.dictationStatus != 'Q')
group by r.reporttype
结果如下:(我添加了一个编号列,因此它不是段落形式)
- ASC 术前咨询 1848.96 240.36
- 听力报告 4403.73 572.48
- 心导管 452.26 58.79
- 冒号 539 操作注释 117.49 15.27
- 结肠镜检查 - 操作说明 118.11 15.35
- 结肠镜检查操作说明 54.88 7.13
- 咨询 3219.01 418.47
- CPAP 滴定 1802.61 234.34
- 出院总结 5259.79 683.77
- EGD - 操作说明 316.66 41.17
- EGD 537 操作说明 178.71 23.23
- EGD-操作说明 194.75 25.32
- 电生理报告 1679.79 218.37
- ER 录取 39402.45 5122.32
- ER 格式 150642.53 19583.53
- ERCP-操作说明 108.88 14.15
- 医院课程 5344.91 694.84
- 多学科肿瘤学 272.38 35.41
- OP 注释 32437.7 4216.9
- 操作说明 - SD698 57.66 7.5
- 疼痛门诊信 32.71 4.25
- 疼痛门诊报告 6.71 0.87
- 疼痛诊所 SD1020 37.75 4.91
- PHP 出院总结 336.81 43.79
- 下午住院咨询 1602.96 208.38
- 多导睡眠图 2466.16 320.6
- 术前咨询 30812.45 4005.62
- SD288 初始伤害 6398.55 831.81
- SD289跟进 2893.45 376.15
- SD289 跟进 2498.36 324.79
- SD488 OP 注释 48.86 6.35
- SD496 - 紧急护理 32.34 4.2
- SD503 - 紧急护理 40.17 5.22
- SD504 - 紧急护理 40.54 5.27
- SD509 - 紧急护理 75.95 9.87
- SD541 - 紧急护理 193.14 25.11
- SD594 - 紧急护理 42.89 5.58
- SD606 - 紧急护理 43.31 5.63
- 睡眠 - MSLT 85.53 11.12
- 睡信4505.21 585.68
- 睡眠报告 25243.47 3281.65
- 演讲报告 357.73 46.5
- STAT 出院总结 1148.06 149.25
- 外科住院医生临床笔记 1961.71 255.02
- 紧急护理 30221.61 3928.81
- 紧急护理 - SD494 227.37 29.56
- 紧急护理 - SD496 37.17 4.83
- 紧急护理 - SD503 202.07 26.27
- 紧急护理 - SD504 117.74 15.31
- 紧急护理 - SD508 67.97 8.84
- 紧急护理 - SD509 60.1 7.81
- 紧急护理 - SD510 33.57 4.36
- 紧急护理 - SD541 47.4 6.16
- 紧急护理 - SD546 27.77 3.61
- 紧急护理 - SD594 40.17 5.22
在大多数数据库中(你没有指定你的),只需使用 CASE
语句按照你想要的方式对值进行分组,然后在你的两个数据库中使用相同的 CASE
语句SELECT
和 GROUP BY
子句。
入门指南:
SELECT CASE WHEN r.reporttype LIKE 'SD%' THEN 'Urgent Care'
WHEN r.reporttype IN ('OP Note','SD805','polysomnography') THEN 'OP Notes'
ELSE r.reporttype END AS reporttype,
sum(cast(round(r.transcriptionlinecount,2) as decimal(8,2))) as "Bill Lines",
(cast(round(sum(r.transcriptionlinecount) * .13,2) as decimal(8,2))) as "Amount"
from rptlinecountinfo as r
join dictation as d on d.dictationID = r.dictationID
where
d.officeID = @officeID
and r.finishedtime between @startDate and @endDate
and (d.dictationStatus != 'D' and d.dictationStatus != 'Q')
group by CASE WHEN r.reporttype LIKE 'SD%' THEN 'Urgent Care'
WHEN r.reporttype IN ('OP Note','SD805','polysomnography') THEN 'OP Notes'
ELSE r.reporttype END
我应该警告你,CASE
语句中的上述逻辑已经被破坏了。原因是你的要求不一致
一方面,您说所有遵循此模式 SD###
的报告类型都应映射到 Urgent Care
。但是 SD805
呢?您说您希望将其映射到 OP Notes
,但根据您的规范,它作为 Urgent Care
也是有效的。所以你必须弄清楚在这种情况下你真正想要的是什么。如果你只有一个例外,那么也许你需要做的就是重新排序条件,以便首先检查例外情况。
此外,为了表示您的 SD###
要求,我将其翻译成非常标准的 LIKE 'SD%'
,它也可能匹配 SD5
或 SD
等模式,或者SDDFGDFG
。如果这不是您想要的,请为您的数据库寻找合适的正则表达式语句,并将其更改为该语句。