17,086
社区成员
发帖
与我相关
我的任务
分享
wiht new_A as(
select rowid,ID1 ID,RATE1 RATE from A union all
select rowid,ID2 ,RATE2 from A union all
select rowid,ID3 ,RATE3 from A union all
select rowid,ID4 ,RATE4 from A union all
select rowid,ID5 ,RATE5 from A)
rowid 相同的就是同一条数据
select wm_concat(ID:||RATE||'%/') from
(select rowid,ID,sum(NVL(RATE)) RATE from
(select rowid,decode(ID,'X','Y') ID,RATE from new_A)
group by rowid, ID)
group by rowid
缺点wm_concat()连接,它不会按照排序的来。
ID1 RATE1 ID2 RATE2 ID3 RATE3 ID4 RATE4 ID5 RATE5
A 50 B 30 C 20
A 60 D 40
E 40 X 30 Y 30
A 30 B 25 Y 25 X 15 M 5
A 100
X 100
B 60 Y 20 F 15 X 5
G 80 X 20
WITH temp AS(
SELECT ROWNUM rn,t.* FROM Element t
)
SELECT rn,max(end)END FROM
(
SELECT rn,wm_concat(result) over (PARTITION BY rn ORDER BY rate desc)end FROM
(
SELECT rn,id,Sum(rate)rate,id||' '||Sum(rate)||'%'result FROM
(
SELECT rn,Decode(id1,'X','Y',id1) id,rate1 rate FROM temp UNION ALL
SELECT rn,Decode(id2,'X','Y',id2) id,rate2 rate FROM temp UNION ALL
SELECT rn,Decode(id3,'X','Y',id3) id,rate3 rate FROM temp UNION ALL
SELECT rn,Decode(id4,'X','Y',id4) id,rate4 rate FROM temp UNION ALL
SELECT rn,Decode(id5,'X','Y',id5) id,rate5 rate FROM temp
)WHERE id IS NOT NULL GROUP BY rn,id
)
)GROUP BY rn;
CREATE TABLE Element(
ID1 VARCHAR2(10),RATE1 NUMBER(20),
ID2 VARCHAR2(10),RATE2 NUMBER(20),
ID3 VARCHAR2(10),RATE3 NUMBER(20),
ID4 VARCHAR2(10),RATE4 NUMBER(20),
ID5 VARCHAR2(10),RATE5 NUMBER(20));
INSERT INTO Element VALUES ('A',50,'B',30,'C',20,NULL,NULL,NULL,NULL);
INSERT INTO Element VALUES ('A',60,'D',40,NULL,NULL,NULL,NULL,NULL,NULL);
INSERT INTO Element VALUES ('E',40,'X',30,'Y',30,NULL,NULL,NULL,NULL);
INSERT INTO Element VALUES ('A',30,'B',25,'Y',25,'X',15,'M',5);
INSERT INTO Element VALUES ('A',100,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
INSERT INTO Element VALUES ('X',100,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
INSERT INTO Element VALUES ('B',60,'Y',20,'F',15,'X',5,NULL,NULL);
INSERT INTO Element VALUES ('G',80,'X',20,NULL,NULL,NULL,NULL,NULL,NULL);
COMMIT;
WITH temp AS(
SELECT ROWNUM rn,t.* FROM Element t
)
SELECT REPLACE(wm_concat(result),',','/') FROM (
SELECT rn,id,Sum(rate)rate,id||' '||Sum(rate)||'%'result FROM
(
SELECT rn,Decode(id1,'X','Y',id1) id,rate1 rate FROM temp UNION ALL
SELECT rn,Decode(id2,'X','Y',id2) id,rate2 rate FROM temp UNION ALL
SELECT rn,Decode(id3,'X','Y',id3) id,rate3 rate FROM temp UNION ALL
SELECT rn,Decode(id4,'X','Y',id4) id,rate4 rate FROM temp UNION ALL
SELECT rn,Decode(id5,'X','Y',id5) id,rate5 rate FROM temp
)WHERE id IS NOT NULL
GROUP BY rn,id
ORDER BY rn,rate desc
)GROUP BY rn