将查询结果作为表头sql语句

现在有一张病人和医生的挂号表。想要以医生为列,每一行显示病人的信息。如下图,医生只需要病人最多的4位,序号一直排下去,而且医生1,医生2这些表头要换成医生的实际名字?... 现在有一张病人和医生的挂号表。想要以医生为列,每一行显示病人的信息。如下图,医生只需要病人最多的4位,序号一直排下去,而且医生1,医生2这些表头要换成医生的实际名字? 展开
 我来答
百度网友2dca20d
2015-01-19 · TA获得超过4036个赞
知道大有可为答主
回答量:2638
采纳率:77%
帮助的人:1012万
展开全部

你的描述不清楚,是不是这样:

追问
对的
追答
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.序号
a470198949
2015-01-19 · TA获得超过359个赞
知道小有建树答主
回答量:592
采纳率:59%
帮助的人:202万
展开全部
表结构和数据列出来
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风在夏季转
2015-01-19 · 超过67用户采纳过TA的回答
知道小有建树答主
回答量:168
采纳率:100%
帮助的人:82万
展开全部
我也不知道该怎么操作,建议你去看看51cto,我记得上面有
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式