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

Hvordan opretter man stigende kolonner?

Forsøg ikke at oprette en kolonne pr. dag; bare opret en tabel med kolonner for placering, dato og for hver statistik (dvs. inficeret, genoprettet, døde osv.), og hvis du har brug for at dreje dem, skal du gøre det i en forespørgsel (eller i en hvilken som helst mellemliggende applikation [dvs. PHP, Java, .net], du bruger til at få adgang til databasen).

Noget som:

OPRET TABEL Regioner( id VARCHAR2(6) CONSTRAINT regions__id__pk PRIMÆR NØGLE, parent_id VARCHAR2(6) CONSTRAINT regions_parent__fk REFERENCER Regioner (id ), navn VARCHAR2(50) CONSTRAINT regions__id__pk CONSTRAINT regions__ID__pk CONSTRAINT regions__STRAINT region CONSTRAINT __nn CONSTRAINT region __name CONSTRAINT region __nn NOT QUENTU_NAME region __nn CONSTRAINT region____nn. NOT NULL, longitude NUMBER CONSTRAINT regions__long__nn NOT NULL, CONSTRAINT regions__id__chk CHECK ( ( parent_id IS NULL AND REGEXP_LIKE( id, '^[A-Z]{2}$' ) ) OR ( parent_id IS NOT NULL AND REGEXP_LIKE[A-Z, id, ]{2}-[A-Z0-9]{1,3}$' ) ) ));KOMMENTAR TIL KOLONNE Regions.id ER 'ISO 3166-2 alfa-2 landekode eller ISO 3166-2 provinskode'; KOMMENTAR TIL KOLONNE Regions.name ER 'ISO 3166-2 engelsk kortnavn.';KOMMENTAR TIL KOLONNE Regions.latitude ER 'Latitude of the region's hovedby.';COMMENT ON COLUMN Regions.longitude IS 'Længdegrad af regionen 's hovedby.';OPRET TABEL Virus_Statist ics( id NUMMER(20,0) GENERETERET ALTID SOM IDENTITETSBEGRÆNSNING virus_statistics__id__pk PRIMÆR NØGLE, placering VARCHAR2(6) BEGRÆNSNING virus_statistics__loc__nn IKKE NULL BEGRÆNSNING virus_statistics__loc__fk REFERENCER Regioner (DATO id__dt_STRAINT_DATE id KONTAKT __dt__dt_TRUNST_DATO_DATISTISK KONTAKT __dt__dt_virus_tidspunkt KONTROLLER_DAT__t_tidspunkt virus(dato_dato_dato_dato_dato_dato_dato_time CHECK(INTERNATIV_TID_Kl. ) ), inficeret NUMBER(10,0), genvundet NUMBER(10,0), dødt NUMBER(10,0), CONSTRAINT virus_statistics__loc__dt__u UNIQUE (placering, datetime )); 

Så kan du indtaste dine data. For eksempel vil regionerne være:

INSERT INTO Regions ( id, parent_id, name, latitude, longitude )VÆLG 'TH', NULL, 'Thailand', 15.00000, 101.00000 FRA DUAL UNION ALLSELECT 'JP', NULL, 'Japan', 36.00000, 36.00000 138.00000 FRA DUAL UNION ALLSELECT 'SG', NULL, 'Singapore', 1.28333, 103.83333 FRA DUAL UNION ALLSELECT 'NP', NULL, 'Nepal', 28.16667, 84.2500M '0Ma SELECTDUAL,'0Ma VALDUAL,'0Ma SELECTDUAL,'0Ma VALDUAL,'0Ma VALDUAL,'0M. , 112.50000 FRA DUAL UNION ALLSELECT 'CA', NULL, 'Canada', 45.42472, - 75.69500 ​​FRA DUAL UNION ALLSELECT 'CA-BC', 'CA', 'British Columbia', 48.40733, -12733, -1273; 

Og de første 3 kolonner med data ville være:

INSERT INTO Virus_Statistics (placering, dato og klokkeslæt, inficeret, genoprettet, død )VÆLG 'TH', DATO '2020-01-22', 2 AS i, 0 AS r, 0 AS d FRA DUAL UNION ALLSELECT ' TH', DATO '2020-01-23', 3, 0, 0 FRA DUAL UNION ALLSELECT 'TH', DATO '2020-01-24', 5, 0, 0 FRA DUAL UNION ALLSELECT 'JP', DATO '2020 -01-22', 2, 0, 0 FRA DUAL UNION ALLSELECT 'JP', DATO '2020-01-23', 1, 0, 0 FRA DUAL UNION ALLSELECT 'JP', DATO '2020-01-24', 2, 0, 0 FRA DUAL UNION ALLSELECT 'SG', DATO '2020-01-22', 0, 0, 0 FRA DUAL UNION ALLSELECT 'SG', DATO '2020-01-23', 1, 0, 0 FRA DUAL UNION ALLSELECT 'SG', DATO '2020-01-24', 3, 0, 0 FRA DUAL UNION ALLSELECT 'NP', DATO '2020-01-22', 0, 0, 0 FRA DUAL UNION ALLSELECT 'NP' , DATO '2020-01-23', 0, 0, 0 FRA DUAL UNION ALLSELECT 'NP', DATO '2020-01-24', 0, 0, 0 FRA DUAL UNION ALLSELECT 'MY', DATO '2020-01 -22', 0, 0, 0 FRA DUAL UNION ALLSELECT 'MY', DATO '2020-01-23', 0, 0, 0 FRA DUAL UNION ALLSELECT 'MY', DATO '2020-0 1-24', 0, 0, 0 FRA DUAL UNION ALLSELECT 'CA-BC', DATO '2020-01-22', 0, 0, 0 FRA DUAL UNION ALLSELECT 'CA-BC', DATO '2020-01- 23', 0, 0, 0 FRA DUAL UNION ALLSELECT 'CA-BC', DATO '2020-01-24', 0, 0, 0 FRA DUAL; 

Hvis du så vil udskrive det som kolonner pr. dag, så brug en PIVOT :

VÆLG *FRA ( VÆLG navn, breddegrad, længdegrad, dato og klokkeslæt, inficeret FRA Virus_Statistics v INNER JOIN-regioner r TIL ( r.id =v.location ))PIVOT ( MAX( inficeret ) FOR datetime IN ( DATO ' 2020-01-22' AS "2020-01-22", DATO '2020-01-23' AS "2020-01-23", DATO '2020-01-24' AS "2020-01-24" ))

Hvilken udgang:

db<>fiddle her




  1. Hent unikke værdier og tæller for hver

  2. Generer et sæt eller en sekvens uden loops – del 3

  3. MySQL OPRET BRUGER med en variabel?

  4. DATEADD-ækvivalent i PostgreSQL