日期:2014-05-17  浏览次数:20439 次

求教sql 行转列问题
有这样一个表:
year    month   monthTotal
2012 11  6
2012 12  13
2011    08       20
2011    03        9
2010    01        24
我现在要把每年的总计,和每月的monthTotal放在一行上,在mysql里面需要如何实现?
下面是我想要的结果:
year  01  02  03  04  05 06  07  08  09  10  11  12  yearTotal
2012  0   0   0   0   0  0   0   0   0   0   6   13   19
2111  0   0   9   0   0  0   0   20  0   0   0    0   29
求各位大神帮帮忙。
mysql?行转列?动态sql

------解决方案--------------------
你这个情况和下面例子很相似
行转列
------解决方案--------------------
我不知道mysql能不能用,这是SQLServer的
----------------------------
-- Author  :DBA_Huangzj
-- Date    :2013-01-08 11:33:15
-- Version:
--      Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 
-- Jun 17 2011 00:54:03 
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1, v.721)
--
----------------------------
--> 测试数据:[huang]
if object_id('[huang]') is not null drop table [huang]
go 
create table [huang]([year] int,[month] varchar(2),[monthTotal] int)
insert [huang]
select 2012,'11',6 union all
select 2012,'12',13 union all
select 2011,'08',20 union all
select 2011,'03',9 union all
select 2010,'01',24
--------------开始查询--------------------------

select * from [huang]

SELECT [YEAR],[01]=MAX(CASE WHEN [month]='01' THEN [monthTotal] ELSE 0 END ),
[02]=MAX(CASE WHEN [month]='02' THEN [monthTotal] ELSE 0 END) ,
[03]=MAX(CASE WHEN [month]='03' THEN [monthTotal] ELSE 0 END) ,
[04]=MAX(CASE WHEN [month]='04' THEN [monthTotal] ELSE 0 END) ,
[05]=MAX(CASE WHEN [month]='05' THEN [monthTotal] ELSE 0 END) ,
[06]=MAX(CASE WHEN [month]='06' THEN [monthTotal] ELSE 0 END) ,
[07]=MAX(CASE WHEN [month]='07' THEN [monthTotal] ELSE 0 END ),
[08]=MAX(CASE WHEN [month]='08' THEN [monthTotal] ELSE 0 END) ,
[09]=MAX(CASE WHEN [month]='09' THEN [monthTotal] ELSE 0 END) ,
[10]=MAX(CASE WHEN [month]='10' THEN [monthTotal] ELSE 0 END) ,
[11]=MAX(CASE WHEN [month]='11' THEN [monthTotal] ELSE 0 END) ,
[12]=MAX(CASE WHEN [month]='12' T