在老人护理工作中,每天都要记录不少数据,比如血压、血糖、服药情况。这些信息通常按时间一条条存进系统,看起来挺清楚,可一旦要汇总某位老人一周的血糖变化,密密麻麻的行记录就让人头疼。
为什么需要行转列?
假设数据库里有这样一张表,记录了张奶奶三天的血糖值:
日期 项目 数值
2024-05-01 空腹血糖 6.2
2024-05-01 餐后血糖 8.1
2024-05-02 空腹血糖 5.9
2024-05-02 餐后血糖 7.8
2024-05-03 空腹血糖 6.4
2024-05-03 餐后血糖 8.3
如果想让每一天的数据横着排,把“项目”变成列名,查起来就直观多了。
用CASE WHEN实现简单行转列
在SQL中,可以用CASE WHEN配合聚合函数来完成转换。语句像这样:
SELECT
日期,
MAX(CASE WHEN 项目 = '空腹血糖' THEN 数值 END) AS 空腹血糖,
MAX(CASE WHEN 项目 = '餐后血糖' THEN 数值 END) AS 餐后血糖
FROM health_data
WHERE 姓名 = '张奶奶'
GROUP BY 日期
ORDER BY 日期;
执行后,结果会变成:
日期 空腹血糖 餐后血糖
2024-05-01 6.2 8.1
2024-05-02 5.9 7.8
2024-05-03 6.4 8.3
这样一排,哪天数值偏高一眼就能看出来,给家属汇报也方便。
动态列处理小技巧
如果项目种类多,比如还加了“睡前血糖”“运动后血糖”,写死条件就麻烦了。有些数据库如MySQL支持GROUP_CONCAT拼接SQL,可以先查出所有项目,再动态生成查询语句。虽然操作复杂点,但一次配置好,以后直接运行就行。
实际应用场景
社区养老中心每月要出一份健康简报,把每位老人的关键指标整理成表格。以前靠手工复制粘贴,容易出错。现在用行转列脚本自动提取数据,导出Excel,省时又准确。护士小李说:“以前花半天做的事,现在十分钟搞定,多出来的时间能陪老人聊聊天。”
技术不一定要高大上,能解决日常问题才是关键。一个小小的SQL变换,让护理工作少点繁琐,多点温度。