科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道SQL Server中行转列问题的终极解决

SQL Server中行转列问题的终极解决

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文将向大家介绍 SQL Server 中行转列问题的终极解决方案,主要应用case语句来解决行转列的问题,下面就一起来看看。

作者:mndn_nana 来源:论坛整理 2007年11月19日

关键字: SQL Server 行转列

  • 评论
  • 分享微博
  • 分享邮件
本文将向大家介绍 SQL Server 中行转列问题的终极解决方案,主要应用case语句来解决行转列的问题,下面就一起来看看。

  行转列问题主要分为两类。

  1)简单的行转列问题:

  示例表:

  id   sid   course   result

  1  2005001 语文    80.0

  2  2005001 数学    90.0

  3  2005001 英语    80.0

  4  2005002 语文    56.0

  5  2005002 数学    69.0

  6  2005002 英语    89.0

  执行:

以下是引用片段:
  select sid,语文=isnull(sum(case course when '语文' then result end),0),
  数学=isnull(sum(case course when '数学' then result end),0),
  英语=isnull(sum(case course when '英语' then result end),0)
  from result
  group by sid
  order by sid

  得出结果:

  sid       语文   数学   英语

  2005001  80.0  90.0  80.0

  2005002  56.0  69.0  89.0

  2)较为复杂的行转列

  表1:course

  id name

  1 语文

  2 数学

  3 英语

  表2:result

  id   sid   course   result

  1  2005001  语文    80.0

  2  2005001  数学    90.0

  3  2005001  英语    80.0

  4  2005002  语文    56.0

  5  2005002  数学    69.0

  6  2005002  英语    89.0

以下是引用片段:
  declare @sql varchar(8000)
  set @sql='select sid'
  select @sql=@sql+','+course.name+'=isnull(sum(case course when '''+course.name+''' then result end),0)'
  from course order by id
  set @sql=@sql+' from result group by sid order by sid'
  print @sql
  exec(@sql)

  得出结果

  sid       语文    数学   英语

  2005001  80.0  90.0  80.0

  2005002  56.0  69.0  89.0

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章