Transponeren van kolom naar rij (MySQL): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
Regel 27: Regel 27:
 
* '''[[Grouping (MySQL) | Grouping]]''' ligt voor de hand als oplossing, maar daabij wordt één variable gegenereerd met daarin meerdere veldname. Alles wordt dus in één veld gestopt
 
* '''[[Grouping (MySQL) | Grouping]]''' ligt voor de hand als oplossing, maar daabij wordt één variable gegenereerd met daarin meerdere veldname. Alles wordt dus in één veld gestopt
 
* '''[[Grouping (MySQL) | Grouping]] + [[Explode (MySQL) | Explode]]:''' Nu worden de cellen gesplitst, maar belanden ze weer op verschillende rijen
 
* '''[[Grouping (MySQL) | Grouping]] + [[Explode (MySQL) | Explode]]:''' Nu worden de cellen gesplitst, maar belanden ze weer op verschillende rijen
* '''Pivoting''' of '''unpivoting''' zoals in een ''pivot table'' is misschien een oplossing, maar ik wil eigenlijk niets doen met aggregeren van info.
+
* '''Pivoting''' of '''unpivoting''' zoals in een ''pivot table'' is misschien een oplossing, maar ik wil eigenlijk niets doen met aggregeren van info
 +
* '''Union select:'''
 
* '''Prepared insert-statement:''' Dit gaat zeker lukken: Ik heb de velden immers al in een string. Hoef ik nog maar om te fietsen naar een ''prepared statement'' + uitvoeren.
 
* '''Prepared insert-statement:''' Dit gaat zeker lukken: Ik heb de velden immers al in een string. Hoef ik nog maar om te fietsen naar een ''prepared statement'' + uitvoeren.
  

Versie van 12 jan 2016 13:14

Het probleem

Ik heb een lege tabel met zo'n 20 velden:

+--------+--------+--------+--------+
| Veld01 | Veld02 |   ...  | Veld20 |
+--------+--------+--------+--------+

Ik wil de namen van die velden in het eerste record zetten, zodat je zoiets krijgt als

+--------+--------+--------+--------+
| Veld01 | Veld02 |   ...  | Veld20 |
+--------+--------+--------+--------+
| Veld01 | Veld02 |   ...  | Veld20 |
+--------+--------+--------+--------+

Achterhalen van de veldnamen is niet moeilijk. Bv.: create table tmp select column_name from information_schema.columns where table_name="tabelnaam";.

Maar hoe krijg ik die namen nu op één rij?

Mogelijke oplossingen

  • Grouping ligt voor de hand als oplossing, maar daabij wordt één variable gegenereerd met daarin meerdere veldname. Alles wordt dus in één veld gestopt
  • Grouping + Explode: Nu worden de cellen gesplitst, maar belanden ze weer op verschillende rijen
  • Pivoting of unpivoting zoals in een pivot table is misschien een oplossing, maar ik wil eigenlijk niets doen met aggregeren van info
  • Union select:
  • Prepared insert-statement: Dit gaat zeker lukken: Ik heb de velden immers al in een string. Hoef ik nog maar om te fietsen naar een prepared statement + uitvoeren.

Prepared Insert-statement

Algemene formulering:

insert into tbl_tabel values (waarde1, waarde2, ...);

Zie ook

Bronnen