Vous ne pouvez pas obtenir vos exemples de données à partir des données "brutes" que vous avez publiées. J'ai procédé à l'ingénierie inverse des données brutes à partir de vos exemples de données dans la sous-requête ORIGINALDATA, puis j'ai proposé cette solution :
WITH SAMPLEDATA (CYCLEID,GROUPID,GROUPNAME,COL1,COL2,COL3,COL4,COL5,COL6,COL7)
AS (
SELECT 1,7669,'000000261','GAS',NULL,NULL,NULL,'1',NULL,'00' FROM DUAL
UNION ALL
SELECT 2,7669,'000000261','GAS',NULL,NULL,NULL,'1',NULL,'000000261' FROM DUAL
UNION ALL
SELECT 3,7669,'000000261','GAS',NULL,NULL,NULL,'Chester',NULL,'00' FROM DUAL
UNION ALL
SELECT 4,7669,'000000261','GAS',NULL,NULL,NULL,'Chester',NULL,'000000261' FROM DUAL
UNION ALL
SELECT 5,7669,'000000261','GFG',NULL,NULL,NULL,'1',NULL,'00' FROM DUAL
UNION ALL
SELECT 6,7669,'000000261','GFG',NULL,NULL,NULL,'1',NULL,'000000261' FROM DUAL
UNION ALL
SELECT 7,7669,'000000261','GFG',NULL,NULL,NULL,'Chester',NULL,'00' FROM DUAL
UNION ALL
SELECT 8,7669,'000000261','GFG',NULL,NULL,NULL,'Chester',NULL,'000000261' FROM DUAL
UNION ALL
SELECT 9,7669,'000000261','GKE',NULL,NULL,NULL,'1',NULL,'00' FROM DUAL
UNION ALL
SELECT 10,7669,'000000261','GKE',NULL,NULL,NULL,'1',NULL,'000000261' FROM DUAL
UNION ALL
SELECT 11,7669,'000000261','GKE',NULL,NULL,NULL,'Chester',NULL,'00' FROM DUAL
UNION ALL
SELECT 12,7669,'000000261','GKE',NULL,NULL,NULL,'Chester',NULL,'000000261' FROM DUAL
)
, originaldata as (
select distinct groupid, groupname, col, val from sampledata
unpivot (val for col in (COL1 as 1,COL2 as 2,COL3 as 3,COL4 as 4,COL5 as 5,COL6 as 6,COL7 as 7))
)
select GROUPID, GROUPNAME,
case when rn = 1 and col1 is null then '*' else col1 end col1,
case when rn = 1 and col2 is null then '*' else col2 end col2,
case when rn = 1 and col3 is null then '*' else col3 end col3,
case when rn = 1 and col4 is null then '*' else col4 end col4,
case when rn = 1 and col5 is null then '*' else col5 end col5,
case when rn = 1 and col6 is null then '*' else col6 end col6,
case when rn = 1 and col7 is null then '*' else col7 end col7
from (
select o.*,
row_number() over(partition by groupid, groupname, col order by val) rn
from originaldata o
)
pivot(
max(val)
for col in (1 as COL1,2 as COL2,3 as COL3,4 as COL4,5 as COL5,6 as COL6,7 as COL7)
)
order by groupid, groupname, rn;
GROUPID GROUPNAME COL1 COL2 COL3 COL4 COL5 COL6 COL7
---------- --------- --------- --------- --------- --------- --------- --------- ---------
7669 000000261 GAS * * * 1 * 00
7669 000000261 GFG Chester 000000261
7669 000000261 GKE
Cordialement, Stew Ashton