一个表如下  
a,b,c  
1,1,x  
2,1,x  
1,2,x  
2,2,x  
...  
其中,列a,b的值为有限个(例如不超过30个),但具体的个数不确定,列c为任意值  
 
怎样把上表转换下面的种形式呢?不一定在数据库中,只要最终能在DBGRid中显示就行。  
 
a,b1,b2,...  
1,x,x,...  
2,x,x,...  
...  
 
b1代表b=1时c的值,b2代表b=2时c的值

解决方案 »

  1.   

    oracle的分析函数很容易实现行列转换
      

  2.   

    如果不是oracle呢?最好是通用的语句。
      

  3.   

    adoquery.sql.text:= 'select b ,c  from tab order by b '
    if recordcount > 0 then
    for i:= 0 to recordcount - 1 do
    begin
     x:=  adoquery.fieldbyname('c').asinteger; 
      y:= adoquery.fieldbyname('c').asinteger; 
     sql1:= 'c as b' + x + ',';//要去掉最后一个逗号
    sql2:= 'b' + x = y;sql:= 'select' + sql1 +'from  表名' + 'where '+ sql2;后面就好做了
      

  4.   

    to: chenwc(海市蜃楼)没大看明白,说一下思路吧,具体的语句我可以自己试。
      

  5.   

    为什么非要在DBGRid中显示,TstringGrid一样显示
      

  6.   

    GetAllValOfC;
    TstringDrid.rows[0].add('a');
    ...
    TStringGrid.rows[1].add('1')