有没好的SQL语句实现功能
表 Test
ID  Value
-------------------
A  2.0
A  3.0
A   2.5
A   2.3
B   1.3
B   1.6
C   1.7
C   1.8
C   2.2
产生如下结果
NewID  A          B           C
1     2.0        1.3         1.7
2     3.0        1.6         1.8
3     2.5                    2.2
4     2.3

解决方案 »

  1.   

    select Case when ID='A' then Value else 0 end) as A,
           Case when ID='B' then Value else 0 end) as B,
           Case when ID='C' then Value else 0 end) as C from Test order by ID
      

  2.   

    大家看清楚了,如果用 case when end 返回多少行呢,是表的所有行,而不是记录ID为A的记录数,也就是ID中最记录最多的数
      

  3.   

    大概是SQL_Server把。
    如果是的话,那么可以用以下的方法来处理
    1. select distinct id from test order by id 获得所有的id.
    2. 根据返回的结果来建立一系列的临时表,如 #temp1(id(identiey(1,1)), A),
    #temp2(id(identiey(1,1)), B),...,并向每个表里加上相关的记录
    3. 用Delphi动态生成一个巨大的查询语句,如select a.id, a.A,b.B,...n.N from #temp1 a,
    ...#tempn N where a.id*= b.id and a.id*= c.id ...不过这并不是一个好方法。建议你用一个2维数组来进行存放+一个查询(或者是一组查询),这样要简单得多.