17,377
社区成员
发帖
与我相关
我的任务
分享
--create table
CREATE GLOBAL TEMPORARY TABLE TEST_TABLE
(
"NO"VARCHAR2(25),
"ID"VARCHAR2(25),
"NAME"VARCHAR2(25),
"COMMENT"VARCHAR2(25)
)on commit delete rows;
--INSERT
INSERT INTO TEST_TABLE("NO","ID","NAME","COMMENT")VALUES('1','001','XX','AAA');
INSERT INTO TEST_TABLE("NO","ID","NAME","COMMENT")VALUES('2','001','XX','BBBB');
INSERT INTO TEST_TABLE("NO","ID","NAME","COMMENT")VALUES('3','001','XX','CCC');
INSERT INTO TEST_TABLE("NO","ID","NAME","COMMENT")VALUES('4','002','YY','DDD');
INSERT INTO TEST_TABLE("NO","ID","NAME","COMMENT")VALUES('5','003','ZZ','EEE');
INSERT INTO TEST_TABLE("NO","ID","NAME","COMMENT")VALUES('6','003','ZZ','FFF');
--select
select t.id,t.name
,decode(
sign((select count(*)from test_table ct1 where t.id=ct1.id)+1-1)
,1
,(select ttl."COMMENT" from TEST_TABLE ttl where ttl."ID"=t."ID"
and ttl."NO" not in(select tt2."NO" from TEST_TABLE tt2 where tt2."ID"=t."ID" and rownum<1)
and rownum=1)
)C1
,decode(
sign((select count(*)from test_table ct1 where t.id=ct1.id)+1-2)
,1
,(select ttl."COMMENT" from TEST_TABLE ttl where ttl."ID"=t."ID"
and ttl."NO" not in(select tt2."NO" from TEST_TABLE tt2 where tt2."ID"=t."ID" and rownum<2)
and rownum=1)
)C2
/*
IF count(id)> 3
select id 第一个
&& 除去结果的前 3-1 条记录
*/
,decode(
sign((select count(*)from test_table ct1 where t.id=ct1.id)+1-3)
,1
,(select ttl."COMMENT" from TEST_TABLE ttl where ttl."ID"=t."ID"
and ttl."NO" not in(select tt2."NO" from TEST_TABLE tt2 where tt2."ID"=t."ID" and rownum<3)
and rownum=1)
)C3
from test_table t
group by t."ID",t."NAME"
ORDER BY t."ID";
/*
row
1 001 XX AAA BBBB CCC
2 002 YY DDD
3 003 ZZ EEE FFF
*/
with t as (
select '001' id ,'XX' a,'AAA' b from dual union all
select '001' id ,'XX' a,'BBBB' b from dual union all
select '001' id ,'XX' a,'CCC' b from dual union all
select '002' id , 'YY' a,'CCC' b from dual union all
select '003' id , 'ZZ' a,'EEE' b from dual union all
select '003' id , 'ZZ' a,'FFF' b from dual
),
s as (
select id,a,WMSYS.WM_CONCAT(b)||',' b from t group by id,a
)
select id,a,substr(b,1,instr(b,',',1)-1) COMMENT1 ,
substr(b,instr(b,',',1)+1,instr(b,',',2)-1) COMMENT2
from s
WITH T AS (
SELECT '001' AS ID, 'XX' AS NAME, 'AAA' AS COM FROM DUAL UNION ALL
SELECT '001' AS ID, 'XX' AS NAME, 'BBB' AS COM FROM DUAL UNION ALL
SELECT '001' AS ID, 'XX' AS NAME, 'CCC' AS COM FROM DUAL UNION ALL
SELECT '002' AS ID, 'YY' AS NAME, 'DDD' AS COM FROM DUAL UNION ALL
SELECT '003' AS ID, 'ZZ' AS NAME, 'EEE' AS COM FROM DUAL UNION ALL
SELECT '003' AS ID, 'ZZ' AS NAME, 'FFF' AS COM FROM DUAL)
SELECT DISTINCT ID, NAME,
(SELECT COM FROM (SELECT ID, NAME,RANK() OVER(PARTITION BY ID ORDER BY COM) RN, COM FROM T) WHERE RN = 1 AND ID = T.ID),
(SELECT COM FROM (SELECT ID, NAME,RANK() OVER(PARTITION BY ID ORDER BY COM) RN, COM FROM T) WHERE RN = 2 AND ID = T.ID)
FROM T;