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

Oracle SQL PIVOT-tabel

Du kan gøre sådan noget:

SQL Fiddle

Oracle 11g R2 Schema Setup :

CREATE TABLE tbl ( "mod", "floor", "Remaining Counts", CountType ) SOM VÆLG 'dz-P-1A', 1, 37, 'CycleCount' FRA DUALUNION ALLE VÆLG 'dz-P -1D', 1, 321, 'CycleCount' FRA DUALUNION ALLE VÆLG 'dz-P-1T', 1, 16, 'CycleCount' FRA DUALUNION ALLE VÆLG 'dz-P-2A', 2, 25, 'CycleCount' FRA DUALUNION ALLE VÆLG 'dz-R-1T', 1, 3318, 'CycleCount' FRA DUALUNION ALLE VÆLG 'dz-P-1A', 1, 6351, 'SimpleBinCount' FRA DUALUNION ALLE VÆLG 'dz-P-1D', 1 , 121, 'SimpleBinCount' FRA DUALUNION ALLE VÆLG 'dz-P-2A', 2, 12638, 'SimpleBinCount' FRA DUALUNION ALLE VÆLG 'dz-R-1F', 1, 68, 'SimpleBinCount' FRA DUALUNION -R-1O', 1, 47, 'SimpleBinCount' FRA DUALUNION ALLE VÆLG 'dz-R-1T', 1, 2051, 'SimpleBinCount' FRA DUAL; 

Forespørgsel 1 :

PIVOT ved hjælp af SUM(CASE ... ) udsagn:

VÆLG CountType, SUM( CASE "mod" WHEN 'dz-P-1A' SÅ "Remaining Counts" END ) AS "P-1-A", SUM( CASE "mod" WHEN 'dz-P -2A' SÅ "Resterende tæller" END ) SOM "P-2-A", SUM(CASE "mod" NÅR 'dz-R-1T' SÅ "Resterende tæller" END ) SOM "R-1-T", SUM ( CASE "mod" NÅR 'dz-R-1F' SÅ "Remaining Counts" END) SOM "R-1-F", SUM( CASE "mod" NÅR 'dz-R-1O' SÅ "Remaining Counts" END ) SOM "R-1-O", SUM(CASE "mod" NÅR 'dz-P-1B' SÅ "Resterende antal" END ) SOM "P-1-B", SUM(CASE "mod" WHEN 'dz-P -1D' SÅ "Resterende antal" SLUT ) SOM "P-1-D"FRA tblGROUP BY CountType 

Resultater :

| COUNTTYPE | P-1-A | P-2-A | R-1-T | R-1-F | R-1-O | P-1-B | P-1-D ||----------------|-------|------|-------|-- ------|--------|--------|-------|| SimpleBinCount | 6351 | 12638 | 2051 | 68 | 47 | (nul) | 121 || CycleCount | 37 | 25 | 3318 | (nul) | (nul) | (nul) | 321 |

Forespørgsel 2 :

Brug af PIVOT-transponering:

SELECT * FROM ( SELECT SUBSTR( "mod", 4 ) AS "mod", "Remaining Counts", CountType FROM tbl t)PIVOT( SUM("Remaining Counts") FOR "mod" IN ( ' P-1A', 'P-2A', 'R-1T', 'R-1F', 'R-1O', 'P-1B', 'P-1D' )) 

Resultater :

| COUNTTYPE | 'P-1A' | 'P-2A' | 'R-1T' | 'R-1F' | 'R-1O' | 'P-1B' | 'P-1D' ||----------------|--------|--------|-------- |--------|--------|--------|--------|| SimpleBinCount | 6351 | 12638 | 2051 | 68 | 47 | (nul) | 121 || CycleCount | 37 | 25 | 3318 | (nul) | (nul) | (nul) | 321 |

Rediger - Indpakning af din forespørgsel:

MED qry AS (vælg drop_zone_id som "Mod", bin_level som "Floor", icqa_process_properties.icqa_process_property_value som "Count Type", count(*) som "Remaining Counts", concat(drop_zone_id, icqa_process_property_value) som "Unique", to_char(sysdate,'hh:mi:ssam') som "Tidspunkt sidst opdateret", to_char(sysdate, 'MM-DD-YYYY') som "Dato sidst opdateret" fra icqa_process_locations indre join icqa_processes på icqa_processes. icqa_process_id =icqa_process_locations.icqa_process_id inner join icqa_process_properties on icqa_processes.icqa_process_id =icqa_process_properties.icqa_process_id inner join bins on bins.bin_id =icqa_process_locations.scannable_id where icqa_count_attempt_id is NULL and icqa_processes.process_status =('Active') and drop_zone_id not like 'dz-R- 1B' og drop_zone_id kan ikke lide 'dz-P-1Z' og drop_zone_id kan ikke lide 'dz-P-EACH_1' og icqa_process_properties.icqa_process_property_value i ('CycleCount', 'SimpleBinCount') grupper efter icqa_process_properties.icqa_process_property_value, bin_level, drop_zone_id rækkefølge efter icqa_process_properties.icqa_process_property_value, drop_zone_id) SELECT THE WHASE Count "Tælle '", Mo SUM-NsAd(CHASE-Tælle '", Mo SUM-NAd) " END ) AS "P-1-A", SUM( CASE "Mod" NÅR 'dz-P-2A' SÅ "Remaining Counts" END ) AS "P-2-A", SUM( CASE "Mod" WHEN ' dz-R-1T' SÅ "Resterende tæller" SLUT ) SOM "R-1-T", SUM(CASE "Mod" NÅR 'dz-R-1F' SÅ "Resterende tæller" SLUT ) SOM "R-1-F ", SUM( CASE "Mod" WHEN 'dz-R-1O' THEN "Remaining Counts" END ) AS "R-1-O", SUM( CASE "Mod" WHEN 'dz-P-1B' THEN "Remaining Counts" " END ) AS "P-1-B", SUM( CASE "Mod" NÅR 'dz-P-1D' SÅ "Remaining Counts" END ) AS "P-1-D"FRA qryGROUP BY "Count Type"; 


  1. MySQL datoformat - hvad du behøver at vide

  2. Hvad er den tilsvarende PostgreSQL-syntaks til Oracles CONNECT BY ... START WITH?

  3. Er det muligt at henvise til kolonnenavne via bindevariabler i Oracle?

  4. hvordan man vælger en liste med 10.000 unikke id'er fra dual i oracle SQL