SQL视图查询如何将两类Carers请假类型合并显示为Carers Leave
需求说明
构建数据库视图时,需要将查询结果中的Carers Paid和Carers Unpaid两个请假类型值统一合并显示为Carers Leave。当前已完成请假余额表、请假类型表的基础关联,筛选了指定UID的请假类型数据,基础查询代码如下:
SELECT a.EmployeeUID AS [Employee ID] ,b.LongName AS [Leave type] -- 此处需实现两类请假类型合并为同一值显示的逻辑 ,a.Mins AS [Leave balance] -- 补全原代码缺失的右方括号 FROM [dbo].[AbsenceBalance] a JOIN [dbo].[AbsenceTypes] b ON a.AbsenceTypesUID = b.UID WHERE b.UID IN (3,4,5,6,7)
实现方案
直接用CASE WHEN条件表达式做值映射即可,不需要修改源表数据,仅在查询层做展示值合并。
方案1:按类型名称匹配(通用性强)
判断查询到的请假类型名称,如果属于两个需要合并的Carers类假期,就返回统一的Carers Leave,其余请假类型保留原有名称,完整代码如下:
SELECT a.EmployeeUID AS [Employee ID], CASE WHEN b.LongName IN ('Carers Paid', 'Carers Unpaid') THEN 'Carers Leave' ELSE b.LongName END AS [Leave type], a.Mins AS [Leave balance] FROM [dbo].[AbsenceBalance] a JOIN [dbo].[AbsenceTypes] b ON a.AbsenceTypesUID = b.UID WHERE b.UID IN (3,4,5,6,7)
方案2:按类型UID匹配(性能更优)
如果提前确认Carers Paid、Carers Unpaid对应的固定UID(比如UID=3、UID=4对应这两类假期),可以直接通过UID判断,避免字符串匹配的开销,写法如下:
SELECT a.EmployeeUID AS [Employee ID], CASE WHEN b.UID IN (3,4) THEN 'Carers Leave' ELSE b.LongName END AS [Leave type], a.Mins AS [Leave balance] FROM [dbo].[AbsenceBalance] a JOIN [dbo].[AbsenceTypes] b ON a.AbsenceTypesUID = b.UID WHERE b.UID IN (3,4,5,6,7)
注意事项
- 以上写法兼容SQL Server、MySQL、PostgreSQL等主流数据库,可以直接用于视图创建
- 该逻辑仅修改查询返回的展示值,不会改动
AbsenceTypes表中存储的原始请假类型名称 - 如果后续还有其他需要合并展示的请假类型,只需要在
CASE WHEN的判断条件里追加对应的值即可
内容的提问来源于stack exchange,提问作者suhaspaunikar
相关产品推荐
相关产品推荐

