请教一个动态列传行的问题,多谢!

_少年已不年_少 2015-06-05 03:26:01
现在有这样一个需要,我需要将一些数据进行列传行,举例说明:TABLE1表中,存储的是患者的诊断信息,不同的患者可能有不同的诊断(一个诊断一行数据,可多行)如下图中TABLE所示,但是现在需要做一个固定格式的统计报表,此报表要求的是每一个人一行来显示,只需要提供四个诊断即可(少于4个诊断的都取出来,多于4个诊断的只取其中4个即可),如下图中“需要的样式”所描述的一样。不知道SQL语句如何来实现。在这里谢谢各位!
...全文
124 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
问题解决,结贴
  • 打赏
  • 举报
回复
引用 3 楼 ky_min 的回复:
--动态
DECLARE @SQL VARCHAR(8000)
DECLARE @M INT,@I VARCHAR(10)
SET @SQL='SELECT NAME'
SELECT TOP 1 @M=COUNT(1)FROM Table1 GROUP BY [NAME] ORDER BY COUNT(1) DESC
IF @M>4 SET @M=4
SET @I=1
WHILE @I<=@M
SELECT @SQL=@SQL+',MAX(CASE WHEN RN='+@I+' THEN DIAGNOSIS END)[D'+@I+']',@I=@I+1
SET @SQL=@SQL+' FROM(SELECT *,ROW_NUMBER()OVER(PARTITION BY [NAME] ORDER BY GETDATE())RN'
	+' FROM Table1)T GROUP BY [NAME]'
--PRINT @SQL
EXEC(@SQL)
不足四个的情况,最多是多少则显示多少
一会验证下再说,你效率很高。呵呵,先谢谢。
还在加载中灬 2015-06-05
  • 打赏
  • 举报
回复
--动态
DECLARE @SQL VARCHAR(8000)
DECLARE @M INT,@I VARCHAR(10)
SET @SQL='SELECT NAME'
SELECT TOP 1 @M=COUNT(1)FROM Table1 GROUP BY [NAME] ORDER BY COUNT(1) DESC
IF @M>4 SET @M=4
SET @I=1
WHILE @I<=@M
SELECT @SQL=@SQL+',MAX(CASE WHEN RN='+@I+' THEN DIAGNOSIS END)[D'+@I+']',@I=@I+1
SET @SQL=@SQL+' FROM(SELECT *,ROW_NUMBER()OVER(PARTITION BY [NAME] ORDER BY GETDATE())RN'
+' FROM Table1)T GROUP BY [NAME]'
--PRINT @SQL
EXEC(@SQL)
不足四个的情况,最多是多少则显示多少
还在加载中灬 2015-06-05
  • 打赏
  • 举报
回复
--动态
DECLARE @SQL VARCHAR(8000)
DECLARE @M INT,@I VARCHAR(10)
SET @SQL='SELECT NAME'
SET @M=4
SET @I=1
WHILE @I<=@M
SELECT @SQL=@SQL+',MAX(CASE WHEN RN='+@I+' THEN DIAGNOSIS END)[D'+@I+']',@I=@I+1
SET @SQL=@SQL+' FROM(SELECT *,ROW_NUMBER()OVER(PARTITION BY NAME ORDER BY GETDATE())RN'
+' FROM Table1)T GROUP BY NAME'
PRINT @SQL
EXEC(@SQL)
--静态
SELECT NAME
,MAX(CASE WHEN RN=1 THEN DIAGNOSIS END)[D1]
,MAX(CASE WHEN RN=2 THEN DIAGNOSIS END)[D2]
,MAX(CASE WHEN RN=3 THEN DIAGNOSIS END)[D3]
,MAX(CASE WHEN RN=4 THEN DIAGNOSIS END)[D4]
FROM(SELECT *,ROW_NUMBER()OVER(PARTITION BY NAME ORDER BY GETDATE())RN FROM Table1)T
GROUP BY NAME


如果固定4项,可以不用动态
  • 打赏
  • 举报
回复
多谢各位回答,谢谢

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧