正在编写报告,我需要在同一排见到主治医生和初级保健医生。目前我的数据有两行。我需要 1 栏作为主治,第二栏作为主治。 当前的:
提前致谢!
我想我可以使用交叉表,但我没有数字数据。
抱歉,正在学习水晶
我不确定您正在使用哪个数据库或 ORM(如果适用),但如果您知道您想要的输出格式,您可以编写 SQL 查询来获取您喜欢的数据。我首先选择您想要进入查询的字段(我使用的是 CASE 语句):
SELECT
ROOM,
PATIENT_NAME,
NUMBER,
CASE
WHEN PHYS_RELATION_TYPE = 'ATTENDING'
THEN PHYSICIAN
END AS ATTENDING,
CASE
WHEN PHYS_RELATION_TYPE = 'PRIMCARE'
THEN PHYSICIAN
END AS PRIMCARE,
SERVICE
FROM patient_data
这应该给你一个像这样的输出:
room | patient_name | number | attending | primcare | service
------+---------------+----------+-----------+-----------+----------
402 | Hello Kitty | 10543826 | Dr Suess | | INT CARE
402 | Hello Kitty | 10543826 | | Dr Pepper | INT CARE
403 | Charlie Brown | 10544027 | Dr Phil | | OBSERVAT
403 | Charlie Brown | 10544027 | | Dr Grey | OBSERVAT
404 | Scooby Doo | 10544481 | | Dr Pepper | MEDICAL
404 | Scooby Doo | 10544481 | Dr Suess | | MEDICAL
现在您可以对数据进行分组以获得您正在寻找的压缩结果:
SELECT
ROOM,
PATIENT_NAME,
NUMBER,
STRING_AGG(
CASE
WHEN PHYS_RELATION_TYPE = 'ATTENDING'
THEN PHYSICIAN
END, ', '
) AS ATTENDING,
STRING_AGG(
CASE
WHEN PHYS_RELATION_TYPE = 'PRIMCARE'
THEN PHYSICIAN
END, ', '
) AS PRIMARY,
SERVICE
FROM patient_data
GROUP BY ROOM, PATIENT_NAME, NUMBER, SERVICE;
这应该会给你一个像这样的结果:
room | patient_name | number | attending | primary | service
------+---------------+----------+-----------+-----------+----------
402 | Hello Kitty | 10543826 | Dr Suess | Dr Pepper | INT CARE
403 | Charlie Brown | 10544027 | Dr Phil | Dr Grey | OBSERVAT
404 | Scooby Doo | 10544481 | Dr Suess | Dr Pepper | MEDICAL
请注意,我正在使用 PostgreSQL“STRING_AGG”函数,它需要一个列和一个分隔符(我使用逗号) - 如果您为单个患者(例如)有多个初级保健医生,他们的名字将显示为“Suess 博士,Pepper 博士”。根据您如何使用这些数据,这个结果可能不是您想要的!祝你好运