---------------------------------------------------------------- -- 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*/
select 姓名, sum(case 科目 when '语文' then 分数 end) as [语文], sum(case 科目 when '语文' then 预期分数 end) as [语文预期分数], sum(case 科目 when '数学' then 分数 end) as [数学], sum(case 科目 when '数学' then 预期分数 end) as [数学预期分数], sum(case 科目 when '物理' then 分数 end) as [物理], sum(case 科目 when '物理' then 预期分数 end) as [物理预期分数] from 表 group by 姓名
-- 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*/
sum(case 科目 when '语文' then 分数 end) as [语文],
sum(case 科目 when '语文' then 预期分数 end) as [语文预期分数],
sum(case 科目 when '数学' then 分数 end) as [数学],
sum(case 科目 when '数学' then 预期分数 end) as [数学预期分数],
sum(case 科目 when '物理' then 分数 end) as [物理],
sum(case 科目 when '物理' then 预期分数 end) as [物理预期分数]
from 表 group by 姓名