sql server 多列转一行

0808xyj 2015-03-19 11:13:21



...全文
558 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
reenjie 2015-03-19
  • 打赏
  • 举报
回复
#3樓表名弄錯了,修正一下。

select 
Sum(case when name='A' then age else null end) as Aage,
Max(case when name='A' then sex else null end) as Asex,
Sum(case when name='A' then kg else null end) as Akg,
Sum(case when name='B' then age else null end) as Bage,
Max(case when name='B' then sex else null end) as Bsex,
Sum(case when name='B' then kg  else null end) as Bkg,
Sum(case when name='C' then age else null end) as Cage,
Max(case when name='C' then sex else null end) as Csex,
Sum(case when name='C' then kg else null end) as Ckg
from Student
还在加载中灬 2015-03-19
  • 打赏
  • 举报
回复
DECLARE @SQL VARCHAR(8000)--SQL2005+可以用VARCHAR(MAX)代替
SET @SQL=''
SELECT @SQL=@SQL+',MAX(CASE WHEN name='''+name+''' THEN age END)['+name+'age]'
	+',MAX(CASE WHEN name='''+name+''' THEN sex END)['+name+'sex]'
	+',MAX(CASE WHEN name='''+name+''' THEN kg END)['+name+'kg]'
FROM student GROUP BY name
SET @SQL='SELECT '+STUFF(@SQL,1,1,'')+'FROM student'
--PRINT @SQL
EXEC(@SQL)
动态方式
reenjie 2015-03-19
  • 打赏
  • 举报
回复
引用 2 楼 reenjie 的回复:

select 
Sum(case when name='A' then age else null end) as Aage,
Sum(case when name='A' then sex else null end) as Asex,
Sum(case when name='A' then kg else null end) as Akg,
Sum(case when name='B' then age else null end) as Bage,
Sum(case when name='B' then sex else null end) as Bsex,
Sum(case when name='B' then kg  else null end) as Bkg,
Sum(case when name='C' then age else null end) as Cage,
Sum(case when name='C' then sex else null end) as Csex,
Sum(case when name='C' then kg else null end) as Ckg
from Student
上面的sql 有誤,小作調整

select 
Sum(case when name='A' then age else null end) as Aage,
Max(case when name='A' then sex else null end) as Asex,
Sum(case when name='A' then kg else null end) as Akg,
Sum(case when name='B' then age else null end) as Bage,
Max(case when name='B' then sex else null end) as Bsex,
Sum(case when name='B' then kg  else null end) as Bkg,
Sum(case when name='C' then age else null end) as Cage,
Max(case when name='C' then sex else null end) as Csex,
Sum(case when name='C' then kg else null end) as Ckg
from t1
reenjie 2015-03-19
  • 打赏
  • 举报
回复

select 
Sum(case when name='A' then age else null end) as Aage,
Sum(case when name='A' then sex else null end) as Asex,
Sum(case when name='A' then kg else null end) as Akg,
Sum(case when name='B' then age else null end) as Bage,
Sum(case when name='B' then sex else null end) as Bsex,
Sum(case when name='B' then kg  else null end) as Bkg,
Sum(case when name='C' then age else null end) as Cage,
Sum(case when name='C' then sex else null end) as Csex,
Sum(case when name='C' then kg else null end) as Ckg
from Student
oraclecaicai 2015-03-19
  • 打赏
  • 举报
回复
CASE WHEN,然后聚合一下。
唐诗三百首 2015-03-19
  • 打赏
  • 举报
回复
请问,如果studen表有100行,结果就是400列,这样的结果集在前端显示合适吗?

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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