将查询结果作为表头sql语句
现在有一张病人和医生的挂号表。想要以医生为列,每一行显示病人的信息。如下图,医生只需要病人最多的4位,序号一直排下去,而且医生1,医生2这些表头要换成医生的实际名字?...
现在有一张病人和医生的挂号表。想要以医生为列,每一行显示病人的信息。如下图,医生只需要病人最多的4位,序号一直排下去,而且医生1,医生2这些表头要换成医生的实际名字?
展开
3个回答
追问
对的
追答
WITH A AS(SELECT *,COUNT(*) OVER(PARTITION BY 医生姓名) 就诊人次,ROW_NUMBER() OVER(PARTITION BY 医生姓名 ORDER BY 病人姓名) 序号
FROM 原表
WHERE 医生姓名 IN(SELECT TOP 4 医生姓名 FROM 原表 GROUP BY 医生姓名 ORDER BY COUNT(*) DESC)),
B AS(SELECT DISTINCT 医生姓名,就诊人次 FROM A),
C AS(SELECT *,ROW_NUMBER() OVER(ORDER BY 就诊人次 DESC) 医生序号 FROM B)
SELECT D1.序号,D1.病人姓名,ISNULL(D2.病人姓名,''),ISNULL(D3.病人姓名,''),ISNULL(D4.病人姓名,'')
FROM (SELECT A.* FROM C JOIN A ON C.医生姓名=A.医生姓名 WHERE C.医生序号=1) D1
LEFT JOIN (SELECT A.* FROM C JOIN A ON C.医生姓名=A.医生姓名 WHERE C.医生序号=2) D2 ON D1.序号=D2.序号
LEFT JOIN (SELECT A.* FROM C JOIN A ON C.医生姓名=A.医生姓名 WHERE C.医生序号=3) D3 ON D1.序号=D3.序号
LEFT JOIN (SELECT A.* FROM C JOIN A ON C.医生姓名=A.医生姓名 WHERE C.医生序号=4) D4 ON D1.序号=D4.序号
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询