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 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.
请问这个怎么实现?
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;
不知道这样可以么?