原始数据:
SN            KP
123456       BP0
123456       DP0
123456       SAD
123456       DAS想修改成的样子:
SN           KPX        KPY
123456      BP0         DP0所有数据都是varchar  
SELECT SN,DECODE(KP,'BP',KP,NULL),DECODE(KP,'DP',KEY_PART_NO,NULL) FROM SFISM4.R_WIP_KEYPARTS_T where SERIAL_NUMBER = '123456'GROUP BY SN,DECODE(KP,'BP',KP,NULL),DECODE(KP,'DP',KEY_PART_NO,NULL)只是GROUP BY SN,直接出错,看了资料,必须带上后面的
但是这样的结果是SN           KPX        KPY
123456      BP0         
123456                  DP0

解决方案 »

  1.   

    楼主,按你的数据,正确的结果应该是这个吧:
    SN     KPX KPY KPZ KPW
    123456 BPO DPO SAD DAS
    因为他们的SN都是123456啊
      

  2.   

    不是哦,
    因为数据记录,先记录SN,然后记录数据
    而不是记录在一条row里的
    而是分开很多row我想要的结果是这个
    但是目前数据是
    原始数据:
    SN KP
    123456 BP0
    123456 DP0
    123456 SAD
    123456 DAS
    要得到的结果是 楼上说的oracle数据库
    别说让我改数据库啊,目前这个系统已经有非常多的数据了!
      

  3.   

    唉,真是的,我真的还是没看明白。真是Sorry了。
      

  4.   

    SN KP
    123456 BP0
    123456 DP0
    123456 SAD
    123456 DAS做一个查询
    达到这样的效果
    SN KPX KPY
    123456 BP0 DP0
    目前我做到这样了 
    SN KPX KPY
    123456 BP0   null
    123456 null   DP0
      

  5.   


    说实话没看明白你的描述,不过你既然已经得到这个结果,再以他为子查询来个max就好了。
    select sn,max(kpx) as kpx,max(kpy) as kpy
      from (你的查询语句)
     group by sn;
      

  6.   

    楼主只说想要的,但从上面的描述来看,还是无法了解规则。4个值:                               BP0、DP0、SAD、DAS
    为什么只保留2个值:     BP0、DP0另外,满足了123456,是否可以满足其它的呢?
      

  7.   

    请楼主描述清楚。
    下面只是满足横列转换:
    select sn,max(kpx) as kpx,max(kpy) as kpy
      from (你的查询语句)
     group by sn;