日期:2014-05-19  浏览次数:20521 次

求一条SQL!!!!!!!!!!!!!!!!!!!
我现在有一维表如下
xh                         kc           cj
051000333   高等数学       55
051000333   大学语文       67
051000333   经济学基础   88
021000224   高等数学       64
021000224   大学语文       32
021000224   经济学基础   75
041000851   高等数学       69
041000851   大学语文       75
041000851   经济学基础   65

要转换成下面的表

xh                             高等数学       大学语文     经济学基础
051000333                 55                       67                   88
021000224                 64                       32                   75
041000851                 69                       75                   65


请问一条SQL能搞定吗?


------解决方案--------------------
create table t(xh varchar(20),kc varchar(20),cj int)
insert t select '051000333 ', '高等数学 ',55
union all select '051000333 ', '大学语文 ',67
union all select '051000333 ', '经济学基础 ',88
union all select '021000224 ', '高等数学 ',64
union all select '021000224 ', '大学语文 ',32
union all select '021000224 ', '经济学基础 ',75
union all select '041000851 ', '高等数学 ',69
union all select '041000851 ', '大学语文 ',75
union all select '041000851 ', '经济学基础 ',65


declare @sql varchar(8000)
set @sql = 'select xh '
select @sql = @sql + ' , sum(case kc when ' ' ' + kc + ' ' ' then cj else 0 end) [ ' + kc + '] '
from (select distinct kc from t) as a
set @sql = @sql + ' from t group by xh '
exec(@sql)

drop table t

xh 大学语文 高等数学 经济学基础
-------------------- ----------- ----------- -----------
021000224 32 64 75
041000851 75 69 65
051000333 67 55 88
------解决方案--------------------
select xh,
sum(case when kc= '高等数学 ' then cj else 0 end) as '高等数学 ',
sum(case when kc= '大学语文 ' then cj else 0 end) as '大学语文 ',
sum(case when kc= '经济学基础 ' then cj else 0 end) as '经济学基础 '
from 表
group by xh
------解决方案--------------------
select xh,高等数学=sum(case kc when '高等数学 ' then cj else 0 end),
大学语文=sum(case kc when '大学语文 ' then cj else 0 end),
经济学基础=sum(case kc when '经济学基础 ' then cj else 0 end)
from t group by xh
------解决方案--------------------

CREATE TABLE #T(xh nvarchar(20),kc nvarchar(40),cj int)
INSERT INTO #T
SELECT '051000333 ', '高等数学 ', 55 UNION ALL
SELECT '051000333 ', '大学语文 ', 67 U