sql >> Database teknologi >  >> RDS >> Oracle

Flyt ikke-NULL-værdier op i partitionen

Du kan ikke få dine prøvedata fra de "rå" data, du har sendt. Jeg reverse engineering af rådata fra dine eksempeldata i underforespørgslen ORIGINALDATA, og kom så med denne løsning:

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

Med venlig hilsen, Stew Ashton




  1. mysql_real_escape_string forårsager problemer?

  2. Hvordan laver du Multiple Inner Joins i Linq til Entities

  3. ListView Kontrol Træk-Drop Sorter begivenheder

  4. Hvordan indstiller man kodningen for tabellernes char-kolonner i django?