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

Pivotering af en tabel i SQL (dvs. krydstabulering / krydstabulering)

Bill Karwin nævner dette, men jeg synes, at dette fortjener at blive påpeget meget tydeligt:

SQL gør ikke, hvad du beder om, så enhver "løsning", du får, bliver en klud.

Hvis du ved det , helt sikkert, det vil altid køre på en Oracle 10, så sikker, Walter Mittys krydstabulering kan gøre det. Den rigtige måde at gøre det på er at arbejde den nemmeste kombination af sorteringsrækkefølge i forespørgslen og applikationskoden for at lægge det rigtigt ud.

  • Det virker på andre databasesystemer,
  • det risikerer ikke, at andre lag går i stykker (jeg kan huske, at MySQL f.eks. havde et problem med>255 kolonner. Er du sikker på, at du grænsefladebibliotek klarer såvel som selve db?)
  • det er (normalt) ikke så meget sværere.

Hvis du har brug for det, kan du bare bede om Content_Row_ID s først, spørg derefter efter de rækker, du har brug for, sorteret efter CampaignID , ContentRowID , hvilket ville give dig hver (udfyldt) celle i venstre mod højre linje-for-linje rækkefølge.

Ps.

Der er en masse ting, som det moderne menneske synes, SQL burde have/gøre, som bare ikke er der. Dette er et, genererede områder er et andet, rekursiv lukning, parametrisk ORDER BY , standardiseret programmeringssprog... listen fortsætter. (selvom der ganske vist er et trick til ORDER BY )



  1. hvordan man kontrollerer værditypen i postgres

  2. Sådan opdaterer og sletter du listen. Se data i SQLite-database med kliklytter?

  3. ALTER TABLE for at tilføje en sammensat primærnøgle

  4. Brug af FLASHBACK i Oracle