如何将DrData表中医生多行数据合并为单行并设置ActiveIndicator
解决方案
要实现每个医生仅一行数据并正确计算ActiveIndicator,别用DISTINCT,改用分组聚合来判断医生是否存在符合条件的服务记录,具体思路如下:
核心逻辑
以医生的唯一标识(比如DrID)分组,检查该医生的所有记录里是否存在满足DrStartDt < 当前日期且DrEndDt IS NULL的条目——只要有一条符合,ActiveIndicator就设为1,否则为0。
示例SQL代码
根据你使用的数据库,替换对应的当前日期函数:
- SQL Server: 用
GETDATE() - MySQL: 用
CURDATE() - Oracle: 用
SYSDATE
SELECT DrID, -- 可添加医生的其他唯一属性(如姓名、职称),需同步加到GROUP BY中 MAX(CASE WHEN DrStartDt < GETDATE() AND DrEndDt IS NULL THEN 1 ELSE 0 END) AS ActiveIndicator FROM DrData GROUP BY DrID -- 若有其他唯一字段,比如DrName,需写成GROUP BY DrID, DrName
为什么DISTINCT不行?
DISTINCT只是单纯去重,没法基于多条记录的条件做聚合判断。而分组聚合可以遍历每个医生的所有记录,通过MAX()函数保留符合条件的标记(只要有一条满足,MAX(1)就会覆盖0),最终得到准确的ActiveIndicator值。
内容的提问来源于stack exchange,提问作者Aaron Knight
相关产品推荐
相关产品推荐

