IF OBJECT_ID(N'Test') IS  NOT NULL
DROP TABLE Test
GOCREATE TABLE Test(id INT,name VARCHAR(10),date VARCHAR(10), VALUE INT)
INSERT INTO Test 
SELECT 
1 ,'张三' ,'201301' ,11233 UNION ALL SELECT 
1 ,'张三' ,'201302' ,22331 UNION ALL SELECT 
1 ,'张三' ,'201303' ,442 UNION ALL SELECT 
1 ,'张三' ,'201304' ,234 UNION ALL SELECT 
2 ,'李四' ,'201301' ,11233 UNION ALL SELECT 
2 ,'李四' ,'201302' ,22331 UNION ALL SELECT 
2 ,'李四' ,'201303' ,442 UNION ALL SELECT 
2 ,'李四' ,'201304' ,234 UNION ALL SELECT 
3 ,'王五' ,'201301' ,11233 UNION ALL SELECT 
3 ,'王五' ,'201302' ,22331 UNION ALL SELECT 
3 ,'王五' ,'201303' ,442 UNION ALL SELECT 
3 ,'王五' ,'201304' ,234 UNION ALL SELECT 
3 ,'王五' ,'201305' ,22114  
 
 
 --------------------------------------------------------------查询---------------------------------------------------
DECLARE @Sql VARCHAR(8000)
SET @Sql='Select id,name '
SELECT @Sql=@Sql+' , isnull(convert(varchar(20),(Max(case [date] when '+date+' then VALUE end))),'''') '''+CASE WHEN LEFT(RIGHT(date,2),1)=0 THEN RIGHT(date,1) ELSE  RIGHT(date,2)  END +'月'+'''   ' 
FROM (SELECT  DISTINCT [date] FROM Test) a
SET @Sql=@Sql+'  FROM Test group by  id,name order by id'
EXEC (@sql)
-----------------------------------------------------------------结果-------------------------------------------------
 /*
 id          name       1月                   2月                   3月                   4月                   5月
----------- ---------- -------------------- -------------------- -------------------- -------------------- --------------------
1           张三         11233                22331                442                  234                  
2           李四         11233                22331                442                  234                  
3           王五         11233                22331                442                  234                  22114
 */

解决方案 »

  1.   

    ----------------------------------------------------------------
    -- Author  :fredrickhu(小F,向高手学习)
    -- Date    :2014-05-20 13:18:35
    -- Version:
    --      Microsoft SQL Server 2012 - 11.0.2100.60 (Intel X86) 
    -- Feb 10 2012 19:13:17 
    -- Copyright (c) Microsoft Corporation
    -- Enterprise Edition: Core-based Licensing on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
    --
    ----------------------------------------------------------------
    --> 测试数据:[tb]
    if object_id('[tb]') is not null drop table [tb]
    go 
    create table [tb]([id] int,[name] varchar(4),[date] int,[value] int)
    insert [tb]
    select 1,'张三',201301,11233 union all
    select 1,'张三',201302,22331 union all
    select 1,'张三',201303,442 union all
    select 1,'张三',201304,234 union all
    select 2,'李四',201301,11233 union all
    select 2,'李四',201302,22331 union all
    select 2,'李四',201303,442 union all
    select 2,'李四',201304,234 union all
    select 3,'王五',201301,11233 union all
    select 3,'王五',201302,22331 union all
    select 3,'王五',201303,442 union all
    select 3,'王五',201304,234 union all
    select 3,'王五',201305,22114
    --------------开始查询--------------------------
    select
    id,name,
    max(case when right(date,2)='01' then value else 0 end) as '1月',
    max(case when right(date,2)='02' then value else 0 end) as '2月',
    max(case when right(date,2)='03' then value else 0 end) as '3月',
    max(case when right(date,2)='04' then value else 0 end) as '4月',
    max(case when right(date,2)='05' then value else 0 end) as '5月',
    max(case when right(date,2)='06' then value else 0 end) as '6月',
    max(case when right(date,2)='07' then value else 0 end) as '月'
    from 
       tb
    group by
       id,name 
    ----------------结果----------------------------
    /* id          name 1月          2月          3月          4月          5月          6月          月
    ----------- ---- ----------- ----------- ----------- ----------- ----------- ----------- -----------
    2           李四   11233       22331       442         234         0           0           0
    3           王五   11233       22331       442         234         22114       0           0
    1           张三   11233       22331       442         234         0           0           0(3 行受影响)*/