求教一条SQL语句

lujianyu1189 2019-10-12 12:56:15
下图是数据结构



autograph deptmc FiledName FiledMx
陈涛 重症医学科 专业方向 重症医学
陈涛 重症医学科 级别 国家级
陈涛 重症医学科 论文名称 不同抗菌药物联用对ICU重症感染患者抗感染治疗的临床疗效及其对病原菌
陈涛 重症医学科 专业方向 重症医学
陈涛 重症医学科 级别 国家级
陈涛 重症医学科 论文名称 国外医院评审的历史与经验及其对我国医院评审的启示
陈涛 重症医学科 专业方向 重症医学
陈涛 重症医学科 级别 国家级
陈涛 重症医学科 论文名称 JCI与我国医院评审标准中药事管理方面内容的比较及启示
陈涛 重症医学科 专业方向 重症医学
陈涛 重症医学科 级别 国家级
陈涛 重症医学科 论文名称 HIMSS7级认证药物闭环管理的探讨

如何进行行转列,形成下面的效果:


姓名 科室名称 专业方向 级别 论文名称
陈涛 重症医学科 重症医学 国家级 不同抗菌药物联用对ICU重症感染患者抗感染治疗的临床疗效及其对病原菌
陈涛 重症医学科 重症医学 国家级 国外医院评审的历史与经验及其对我国医院评审的启示
陈涛 重症医学科 重症医学 国家级 JCI与我国医院评审标准中药事管理方面内容的比较及启示
陈涛 重症医学科 重症医学 国家级 HIMSS7级认证药物闭环管理的探讨
...全文
47 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hello World, 2019-10-12
  • 打赏
  • 举报
回复
数据不规范,要是再多一条数据怎么算?连个关键字段都没有
leo_lesley 2019-10-12
  • 打赏
  • 举报
回复






DECLARE @t TABLE(autograph VARCHAR(10), deptmc VARCHAR(10), FiledName  VARCHAR(10),FiledMx VARCHAR(100))
INSERT @t
	  SELECT '陈涛','重症医学科','专业方向','重症医学'
UNION all SELECT '陈涛','重症医学科','级别','国家级'
UNION all SELECT '陈涛','重症医学科','论文名称','不同抗菌药物联用对ICU重症感染患者抗感染治疗的临床疗效及其对病原菌'
UNION all SELECT '陈涛','重症医学科','专业方向','重症医学'
UNION all SELECT '陈涛','重症医学科','级别','国家级'
UNION all SELECT '陈涛','重症医学科','论文名称','国外医院评审的历史与经验及其对我国医院评审的启示'
UNION all SELECT '陈涛','重症医学科','专业方向','重症医学'
UNION all SELECT '陈涛','重症医学科','级别','国家级'
UNION all SELECT '陈涛','重症医学科','论文名称','JCI与我国医院评审标准中药事管理方面内容的比较及启示'
UNION all SELECT '陈涛','重症医学科','专业方向','重症医学'
UNION all SELECT '陈涛','重症医学科','级别','国家级'
UNION all SELECT '陈涛','重症医学科','论文名称','HIMSS7级认证药物闭环管理的探讨'


SELECT autograph,deptmc
,MAX(CASE WHEN  FiledName = '专业方向' THEN FiledMx ELSE '' END)
,MAX(CASE WHEN  FiledName = '级别' THEN FiledMx ELSE '' END)
,MAX(CASE WHEN  FiledName = '论文名称' THEN FiledMx ELSE '' END)
FROM (SELECT id=ROW_NUMBER() OVER(PARTITION BY autograph,filedname ORDER BY autograph,filedname), * FROM @t) t
GROUP BY autograph,deptmc,id

二月十六 版主 2019-10-12
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([autograph] nvarchar(22),[deptmc] nvarchar(25),[FiledName] nvarchar(24),[FiledMx] nvarchar(54))
Insert #T
select N'陈涛',N'重症医学科',N'专业方向',N'重症医学' union all
select N'陈涛',N'重症医学科',N'级别',N'国家级' union all
select N'陈涛',N'重症医学科',N'论文名称',N'不同抗菌药物联用对ICU重症感染患者抗感染治疗的临床疗效及其对病原菌' union all
select N'陈涛',N'重症医学科',N'专业方向',N'重症医学' union all
select N'陈涛',N'重症医学科',N'级别',N'国家级' union all
select N'陈涛',N'重症医学科',N'论文名称',N'国外医院评审的历史与经验及其对我国医院评审的启示' union all
select N'陈涛',N'重症医学科',N'专业方向',N'重症医学' union all
select N'陈涛',N'重症医学科',N'级别',N'国家级' union all
select N'陈涛',N'重症医学科',N'论文名称',N'JCI与我国医院评审标准中药事管理方面内容的比较及启示' union all
select N'陈涛',N'重症医学科',N'专业方向',N'重症医学' union all
select N'陈涛',N'重症医学科',N'级别',N'国家级' union all
select N'陈涛',N'重症医学科',N'论文名称',N'HIMSS7级认证药物闭环管理的探讨'
Go
--测试数据结束
SELECT t1.autograph AS 姓名,t1.deptmc AS 科室名称,t2.FiledMx AS 专业方向,t1.FiledMx AS 级别,t3.FiledMx AS 论文名称 FROM (
SELECT *,ROW_NUMBER()OVER(PARTITION BY autograph ORDER BY GETDATE()) rn from #T WHERE FiledName='级别'
)t1 JOIN (
SELECT *,ROW_NUMBER()OVER(PARTITION BY autograph ORDER BY GETDATE()) rn from #T WHERE FiledName='专业方向'
)t2 ON t2.autograph = t1.autograph AND t2.deptmc = t1.deptmc AND t1.rn=t2.rn
JOIN (
SELECT *,ROW_NUMBER()OVER(PARTITION BY autograph ORDER BY GETDATE()) rn from #T WHERE FiledName='论文名称'
)t3 ON t3.autograph = t1.autograph AND t3.deptmc = t1.deptmc AND t1.rn=t3.rn



极客诗人 2019-10-12
  • 打赏
  • 举报
回复
没有对应关系 做不到
morliz子轩 2019-10-12
  • 打赏
  • 举报
回复
这数据结构写的够流氓的

34,575

社区成员

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

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