按列显示出来

liuxmzc 2016-02-16 02:08:24
问题:


name value date
n1 v1 d1
n1 v2 d2
n1 v3 d3
n2 v4 d1
n2 v5 d2
n2 v6 d3
n3 v7 d1
n3 v8 d2
......

请问如何显示成:
name value name value name value date ......
n1 v1 n2 v4 n3 v7 d1 ......
n1 v2 n2 v5 n3 v8 d2 ......
n1 v3 n2 v6 null null d3 ......

name 有20多个,请问要生成如上报表如何实现SQL
...全文
194 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
道素 2016-02-17
  • 打赏
  • 举报
回复
测试数据:

;WITH t(n,v,d) AS (
	select 'n1','v1','d1' UNION
	select 'n1','v2','d2' UNION
	select 'n1','v3','d3' UNION
	select 'n2','v4','d1' UNION
	select 'n2','v5','d2' UNION
	select 'n2','v6','d3' UNION
	select 'n3','v7','d1' UNION
	select 'n3','v8','d2'
)
SELECT * INTO #t FROM t
计算:

declare @sql varchar(max) 
 select @sql = isnull(@sql+',','') + 'max(case n when '''+n+''' then n else null end) as [name], max(case n when '''+n+''' then v else null end) as [value]'
 from (select distinct n from #t) a
 set @sql = 'select d, '+@sql+' from #t group by d'
 exec(@sql)
 
/*
d	name	value	name	value	name	value
d1	n1	v1	n2	v4	n3	v7
d2	n1	v2	n2	v5	n3	v8
d3	n1	v3	n2	v6	NULL	NULL
*/

22,297

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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