Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将重复的行移动到列中,使每一行都是唯一的_Sql - Fatal编程技术网

Sql 如何将重复的行移动到列中,使每一行都是唯一的

Sql 如何将重复的行移动到列中,使每一行都是唯一的,sql,Sql,我处理患者数据。当加入表格以显示哪个clician看到了患者时,如果患者看到了多个临床医生,我会看到多行。我使用了一个行号函数来突出显示第二位临床医生。但是,我需要每行代表一名患者,如果有多个临床医生,则需要额外的列来显示临床医生的姓名 我的查询输出了以下数据 patient Clinician seen Clinician number 1 joe 1 2 dan 1 2 pe

我处理患者数据。当加入表格以显示哪个clician看到了患者时,如果患者看到了多个临床医生,我会看到多行。我使用了一个行号函数来突出显示第二位临床医生。但是,我需要每行代表一名患者,如果有多个临床医生,则需要额外的列来显示临床医生的姓名

我的查询输出了以下数据

patient Clinician seen  Clinician number  
1       joe                  1  
2       dan                  1  
2       peter                2  
3       sandra               1  
4       andrea               1  
4       steve                2  
5       helen                1  
我需要输出为:

patient Clinician seen 1    person seen 2  
1   joe                     NULL  
2   dan                     peter  
3   sandra                  NULL  
4   andrea                  steve  
5   helen                   NULL  
我的问题是:

SELECT

patient,  
Clinician_seen,  
,ROW_NUMBER ( ) OVER(PARTITION BY patient ORDER BY Clinician_seen asc )

FROM
patients  
clinicians on patients.patietn_id = clinicians.patietn_id 

您可以为此使用条件聚合:

SELECT patient,
       MAX(case when cnum = 1 then Clinician_seen end) as Clinician1,
       MAX(case when cnum = 2 then Clinician_seen end) as Clinician2
FROM (SELECT p.patient, c.Clinician_seen,  
             ROW_NUMBER ( ) OVER (PARTITION BY p.patient ORDER BY c.Clinician_seen asc ) as cnum
      FROM patients p JOIN
           clinicians c
           on p.patient_id = c.patient_id 
     ) t
GROUP BY patient;