有没有写过这样的SQL语句:表中的一条纪录,字段A=01时,显示一条纪录,同时字段A1赋为000001,B1取B字段的值;
字段A=02时,显示两条纪录,字段A1分别赋为000002和000003,B1分别为B字段和C字段的值。
原始纪录
A B C
01 11 00
02 22 33之后
A1 B1
000001 11
000002 22
000003 33

解决方案 »

  1.   

    SELECT '000001',B FROM TBNAME WHERE A='01'
    UNION ALL
    SELECT '000002',B FROM TBNAME WHERE A='02'
    UNION ALL
    SELECT '000003',C FROM TBNAME WHERE A='02';
      

  2.   

    谢谢bzszp的回复,2条纪录时你的语句是可以的,但是如果有多条纪录就不行了。如有多条A=02的纪录。
      

  3.   

    什么问题?
    SQL> select * from tt;A          B          C
    ---------- ---------- ----------
    01         11         00
    02         22         33
    02         222        333
    02         2222       3333
    02         22222      33333SQL> SELECT '000001',B FROM TT WHERE A='01'
      2  UNION ALL
      3  SELECT '000002',B FROM TT WHERE A='02'
      4  UNION ALL
      5  SELECT '000003',C FROM TT WHERE A='02';'00000 B
    ------ ----------
    000001 11
    000002 22
    000002 222
    000002 2222
    000002 22222
    000003 33
    000003 333
    000003 3333
    000003 33333已选择9行。SQL>
      

  4.   

    :)不好意思,我刚才搞错了。上面显示的'00000我能不能改成其它的名称啊。能不能加上ORDER BY 啊?
      

  5.   

    把union all 换成 union
    或者嵌套一层 在外面加order by
      

  6.   

    当然可以改列名了
    SQL> SELECT '000001' colName,B FROM TT WHERE A='01'
      2  UNION 
      3  SELECT '000002',B FROM TT WHERE A='02'
      4  UNION 
      5  SELECT '000003',C FROM TT WHERE A='02';COLNAM B
    ------ ----------
    000001 11
    000002 22
    000002 222
    000002 2222
    000002 22222
    000003 33
    000003 333
    000003 3333
    000003 33333已选择9行。SQL>