Home > Database > Mysql Tutorial > SQL Server中行转列问题的终极解决

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

WBOY
Release: 2016-06-07 15:05:04
Original
1613 people have browsed it

本文将向大家介绍 SQL Server 中行 转列 问题 的 终极 解决 方案,主要应用case语句来 解决 行转列的 问题 ,下面就一起来看看。 行转列 问题 主要分为两类。 1)简单的行转列 问题 : 示例表: idsidcourse result 1 2005001 语文80.0 2 2005001 数学90.0 3 20

  本文将向大家介绍 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

  点击查看原文>>

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template