id           state1             state2           result     
1              A                      B                    X
1              A                      C                    XX
2             D                      F                   XXX
2             D                      F                  XXXX
2             D                      F                 XXXXX
........
有张表如上图所示,所有的值没有完全列出来,需求是:当id相同时候,以state1和state2来区分,如果state1跟state2 是唯一的,就把result的值取出来并拼在一起作为一个新的值。
如,id=2的时候,因为,state1和state2都是D和F,那么result为'XXX'||'XXXX'||'XXXXX'
但是id为1的时候,因为state1和state2并不唯一,则result实际为2种,X和XX.
请问这个怎么实现?

解决方案 »

  1.   

    你是想在现有result的基础上,再生成一个新的result?
      

  2.   


    WITH T AS
     (SELECT 1 ID, 'A' STATE1, 'B' STATE2, 'X' RESULT
        FROM DUAL
      UNION ALL
      SELECT 1, 'A', 'C', 'XX'
        FROM DUAL
      UNION ALL
      SELECT 2, 'D', 'F', 'XXX'
        FROM DUAL
      UNION ALL
      SELECT 2, 'D', 'F', 'XXXX'
        FROM DUAL
      UNION ALL
      SELECT 2, 'D', 'F', 'XXXXX'
        FROM DUAL)
    SELECT ID, STATE1, STATE2, REPLACE(WM_CONCAT(RESULT), ',', '') NEW_RESULT
      FROM T
     GROUP BY ID, STATE1, STATE2;
    不知道这样可以么?