当前位置: 代码迷 >> Sql Server >> SQL行列转换的解决方案
  详细解决方案

SQL行列转换的解决方案

热度:10   发布时间:2016-04-24 18:27:04.0
求一个SQL行列转换的解决方案
表存储结构如下定义
姓名           科目           分数           预期分数 
张三           语文             74                    90
张三           数学             83                    60
张三           物理             93                    78
李四           语文             74                   100
李四           数学             84                    85
李四           物理             94                    60

科目中的项是不确定的(不止语文数学物理)
想要得到结果如下

姓名    语文    语文预期分数    数学    数学预期分数    物理    物理预期分数

李四      74                     100       84                     85       94                      94
张三      74                      90        83                     60       93                      78

------解决方案--------------------
----------------------------------------------------------------
-- Author  :DBA_HuangZJ(发粪涂墙)
-- Date    :2014-03-11 15:37:54
-- Version:
--      Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) 
-- Apr  2 2010 15:48:46 
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据[huang]
if object_id('[huang]') is not null drop table [huang]
go 
create table [huang]([姓名] nvarchar(4),[科目] nvarchar(4),[分数] int,[预期分数] int)
insert [huang]
select N'张三',N'语文',74,90 union all
select N'张三',N'数学',83,60 union all
select N'张三',N'物理',93,78 union all
select N'李四',N'语文',74,100 union all
select N'李四',N'数学',84,85 union all
select N'李四',N'物理',94,60
--------------生成数据--------------------------

declare @s nvarchar(4000)
set @s=''
Select     @s=@s+','+quotename([科目])+N'=max(case when [科目]=N'+quotename([科目],'''')+N' then [分数] else 0 end)'
+','+quotename([科目]+N'预期分数')+N'=max(case when [科目]=N'+quotename([科目],'''')+N' then [预期分数] else 0 end)'
from [huang] group by [科目]
exec('select [姓名]'+@s+' from [huang] group by [姓名]')
----------------结果----------------------------
/* 
姓名   数学          数学预期分数      物理          物理预期分数      语文          语文预期分数
---- ----------- ----------- ----------- ----------- ----------- -----------
张三   83          60          93          78          74          90
李四   84          85          94          60          74          100
  相关解决方案