将行数据转置为列数据

问题描述 投票:0回答:1

正在编写报告,我需要在同一排见到主治医生和初级保健医生。目前我的数据有两行。我需要 1 栏作为主治,第二栏作为主治。 当前的: enter image description here

我需要什么: enter image description here

提前致谢!

我想我可以使用交叉表,但我没有数字数据。
抱歉,正在学习水晶

row grouping transpose
1个回答
0
投票

我不确定您正在使用哪个数据库或 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 博士”。根据您如何使用这些数据,这个结果可能不是您想要的!祝你好运

© www.soinside.com 2019 - 2024. All rights reserved.