sql-server - SQL Server 将 2 个条件合二为一
问题描述
我有以下 SQL 语句来获取 2020 年和 2021 年的约会:
SELECT
YEAR(A.AppointmentDate) AS [Year],
ATS.[Description] AS AppointmentSource,
MONTH(A.Appointmentdate) AS MonthNumber,
COUNT(A.AppointmentID) AS NumberOfAppointments
FROM
Appointment A
INNER JOIN
AppointmentStatus AST ON AST.AppointmentStatusID = A.AppointmentStatusID
INNER JOIN
AppointmentSource ATS ON ATS.AppointmentSourceID = A.AppointmentSourceID
WHERE
YEAR(A.AppointmentDate) IN (2021, 2020)
AND ATS.AppointmentSourceID IN (1, 3)
AND A.AppointmentStatusID = 1 -- Active
GROUP BY
YEAR(A.AppointmentDate), MONTH(A.AppointmentDate),
ATS.[Description], AST.AppointmentStatusName
约会来源表 (AppointmentSource) 有以下几行:
- 呼叫中心
- 代理人
- 网络
我需要将呼叫中心 + 代理的数量显示为“呼叫中心”,将网络显示为“网络”
请帮我。
解决方案
这是一种解决方法,但如果我正确理解您的问题,应该会得到您所追求的:
SELECT
YEAR(A.AppointmentDate) AS [Year],
CASE WHEN ATS.AppointmentSourceID in (1,2) THEN ' Call Center' ELSE 'Web' END AS AppointmentSource,
MONTH(A.Appointmentdate) AS MonthNumber,
COUNT(A.AppointmentID) AS NumberOfAppointments
FROM
Appointment A
INNER JOIN
AppointmentStatus AST ON AST.AppointmentStatusID = A.AppointmentStatusID
INNER JOIN
AppointmentSource ATS ON ATS.AppointmentSourceID = A.AppointmentSourceID
WHERE
YEAR(A.AppointmentDate) IN (2021, 2020)
--AND ATS.AppointmentSourceID IN (1, 3)
AND A.AppointmentStatusID = 1 -- Active
GROUP BY
YEAR(A.AppointmentDate), MONTH(A.AppointmentDate),
CASE WHEN ATS.AppointmentSourceID in (1,2) THEN ' Call Center' ELSE 'Web' END
基本上,我们在这里忽略了查找表,并将值硬编码在 case 语句中,以将两个约会源组合为一个。
如果您有太多查找值,则替代选项是连接条件中的另一种解决方法:
SELECT
YEAR(A.AppointmentDate) AS [Year],
ATS.[Description] AS AppointmentSource,
MONTH(A.Appointmentdate) AS MonthNumber,
COUNT(A.AppointmentID) AS NumberOfAppointments
FROM
Appointment A
INNER JOIN
AppointmentStatus AST ON AST.AppointmentStatusID = CASE when A.AppointmentStatusID in (1,2) then 1 else A.AppointmentStatusID end --checking if AppointmentStatusID is 1 or 2 then I am passing 1 to the join condition
INNER JOIN
AppointmentSource ATS ON ATS.AppointmentSourceID = A.AppointmentSourceID
WHERE
YEAR(A.AppointmentDate) IN (2021, 2020)
--AND ATS.AppointmentSourceID IN (1, 3)
AND A.AppointmentStatusID = 1 -- Active
GROUP BY
YEAR(A.AppointmentDate), MONTH(A.AppointmentDate),
ATS.[Description], AST.AppointmentStatusName
推荐阅读
- python - 无法理解 Doc2Vec 输出
- git - 无需克隆存储库的 git push 中的问题
- reactjs - 将反应表单中的信息发送到我的电子邮件
- game-engine - 2D运动如何修复?
- python - 使用 Python 3.7 和 Webdriver,如何在 "
我在下面包含部分 HTML。我相信我已经使用以下命令找到了更大的元素:
driver.find_element_by_xpath('//div[@id="day-number-4"]')
- javascript - 如何在父 div 中获取 div 的索引?
- c# - 如何在树状数据中将存储在子对象中的数值迭代和求和到父对象
- javascript - Async / Await with Firebase / Firestore 在 forEach 中
- excel - 根据现有列表创建和更新工作表
- php - Wordpress 错误:本网站出现严重错误。请检查您的站点管理员电子邮件收件箱以获取说明