现在复杂了点,我试了多次不行,大哥看看,我只有90分了
请教一个问题
怎样将表
   ID       电价类型    电量      电费
  001        A           1        10
  001        B           2        20
  001        C           3        30
  002        A           1        10
  002        B           1        10
  002        C           2        20
  003        A           1        10
  003        B           3        30
  003        C           1        10进行查询得出
  ID      A1    A2       B1       B2      C1      C2       
 001      1     10        2       20       3      30
 002      1     10        1       10       2      20
 003      1     10        3       30       1      10

解决方案 »

  1.   

    --建立测试表
    create table 表(ID char(3), 电价类型 char(1),    电量 integer,      电费 integer)
    insert into 表
    select 
      '001',        'A',           1 ,       10
    union select
      '001',        'B',           2 ,       20
    union select
      '001',        'C',           3 ,       30
    union select
      '002',        'A' ,          1 ,       10
    union select
      '002',        'B' ,          1 ,       10
    union select
      '002',        'C',           2  ,      20
    union select
      '003',        'A',           1  ,      10
    union select
      '003',        'B',           3  ,      30
    union select
      '003',        'C' ,          1  ,      10select * from 表--动态查询
    DECLARE @SQL VARCHAR(8000) 
    SET @SQL='SELECT ID' 
    SELECT @SQL= @SQL+  ',max(CASE WHEN 电价类型 = ''' + 电价类型 + ''' THEN 电量  END) [' + 电价类型 + '电量]
    ,max(CASE WHEN 电价类型 = ''' + 电价类型 + ''' THEN 电费  END) [' + 电价类型 + '电费]'
    FROM (SELECT DISTINCT 电价类型 FROM 表) A 
    SET @SQL=@SQL+ ' FROM 表 GROUP BY ID' 
    EXEC (@SQL) 
    --删除测试环境
    drop table 表
      

  2.   

    一些实例请参考~~http://blog.csdn.net/jinjazz/archive/2004/09/30/121456.aspx
      

  3.   

    太感谢了,我另一个号有200分都给你!请教一个问题
    怎样将表
       ID       电价类型    电量      电费      村名      供电所
      001        A           1        10        张村      赵镇供电所     
      001        B           2        20        张村      赵镇供电所
      001        C           3        30        张村      赵镇供电所
      002        A           1        10        李村      赵镇供电所
      002        B           1        10        李村      赵镇供电所
      002        C           2        20        李村      赵镇供电所
      003        A           1        10        王村      赵镇供电所
      003        B           3        30        王村      赵镇供电所
      003        C           1        10        王村      赵镇供电所进行查询得出
      ID      A1    A2       B1       B2      C1      C2       村名     供电所
     001      1     10        2       20       3      30       张村     赵镇供电所
     002      1     10        1       10       2      20       李村     赵镇供电所
     003      1     10        3       30       1      10       王村     赵镇供电所
      

  4.   

    DECLARE @SQL VARCHAR(8000) 
    SET @SQL='SELECT ID,村名,供电所' 
    SELECT @SQL= @SQL+  ',max(CASE WHEN 电价类型 = ''' + 电价类型 + ''' THEN 电量  END) [' + 电价类型 + '电量]
    ,max(CASE WHEN 电价类型 = ''' + 电价类型 + ''' THEN 电费  END) [' + 电价类型 + '电费]'
    FROM (SELECT DISTINCT 电价类型 FROM 表) A 
    SET @SQL=@SQL+ ' FROM 表 GROUP BY ID村名,供电所' 
    EXEC (@SQL)
      

  5.   

    多项分组应该是对的 但老出错
    在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
      

  6.   

    --漏了一个逗号啊
    --建立测试表
    create table 表(ID char(3), 电价类型 char(1),    电量 integer,      电费 integer,村名 char(30),供电所 char(30))
    insert into 表
    select 
      '001',        'A',           1 ,       10,'张村' ,     '赵镇供电所'
    union select
      '001',        'B',           2 ,       20,'张村' ,     '赵镇供电所'
    union select
      '001',        'C',           3 ,       30,'张村' ,     '赵镇供电所'
    union select
      '002',        'A' ,          1 ,       10,'王村' ,    '赵镇供电所'
    union select
      '002',        'B' ,          1 ,       10,'王村'  ,    '赵镇供电所'
    union select
      '002',        'C',           2  ,      20,'王村'  ,    '赵镇供电所'
    union select
      '003',        'A',           1  ,      10,'李村'   ,   '赵镇供电所'
    union select
      '003',        'B',           3  ,      30,'李村'   ,   '赵镇供电所'
    union select
      '003',        'C' ,          1  ,      10,'李村'   ,   '赵镇供电所'select * from 表--动态查询
    DECLARE @SQL VARCHAR(8000) 
    SET @SQL='SELECT ID,村名,供电所' 
    SELECT @SQL= @SQL+  ',max(CASE WHEN 电价类型 = ''' + 电价类型 + ''' THEN 电量  END) [' + 电价类型 + '电量]
    ,max(CASE WHEN 电价类型 = ''' + 电价类型 + ''' THEN 电费  END) [' + 电价类型 + '电费]'
    FROM (SELECT DISTINCT 电价类型 FROM 表) A 
    SET @SQL=@SQL+ ' FROM 表 GROUP BY ID,村名,供电所' 
    EXEC (@SQL)--删除测试环境
    drop table 表
      

  7.   

    哈哈, jinjazz(近身剪(N-P攻略)) 牛人。。