1

Given the following base table, which implements a sort of Entity-Attribute-Value table

CREATE OR REPLACE TABLE dipendenti_detail (
    id_dipendente int(10) unsigned DEFAULT 0,
    id_azienda int(10) unsigned NOT NULL DEFAULT 1,
    id_sede int(10) unsigned NOT NULL DEFAULT 1,
    revisione_documento int(10) unsigned NOT NULL DEFAULT 0,
    campo varchar(255) NOT NULL DEFAULT '',
    valore varchar(255) DEFAULT NULL,
    PRIMARY KEY (id_dipendente,id_azienda,id_sede,revisione_documento,campo)
) ENGINE=InnoDB;

And the following example data:

id_dipendente id_azienda id_sede revisione_documento campo valore
187 2 98 0 ID Ente Esterno
187 2 98 0 ID Ruolo 1
187 2 98 0 Qualifica Amministrativo - Collaboratore di Amministrazione
187 2 98 0 Ruolo Dipendente
187 2 98 0 test
188 2 98 0 ID Ente Esterno
188 2 98 0 ID Ruolo 1
188 2 98 0 Qualifica Amministrativo - Collaboratore di Amministrazione
188 2 98 0 Ruolo Dipendente
189 2 98 0 ID Ente Esterno
189 2 98 0 ID Ruolo 1
189 2 98 0 Qualifica Amministrativo - Collaboratore di Amministrazione
189 2 98 0 Ruolo Dipendente
190 2 98 0 ID Ente Esterno
190 2 98 0 ID Ruolo 1
190 2 98 0 Qualifica Amministrativo - Collaboratore di Amministrazione
190 2 98 0 Ruolo Dipendente
191 2 98 0 ID Ente Esterno
191 2 98 0 ID Ruolo 1
191 2 98 0 Qualifica Ricercatore - Primo Ricercatore
191 2 98 0 Ruolo Dipendente
192 2 98 0 ID Ente Esterno 335
192 2 98 0 ID Ruolo 2
192 2 98 0 Qualifica Prof. Ordinario
192 2 98 0 Ruolo Associato
193 2 98 0 ID Ente Esterno
193 2 98 0 ID Ruolo 1
193 2 98 0 Qualifica Ricercatore - Ricercatore
193 2 98 0 Ruolo Dipendente
194 2 98 0 ID Ente Esterno 335
194 2 98 0 ID Ruolo 2
194 2 98 0 Qualifica Prof. Ordinario
194 2 98 0 Ruolo Associato
195 2 98 0 ID Ente Esterno 335
195 2 98 0 ID Ruolo 2
195 2 98 0 Qualifica Prof. Associato
195 2 98 0 Ruolo Associato

I tried creating a PIVOT table using the CONNECT engine:

CREATE OR REPLACE TABLE dipendenti_detail_pivot
ENGINE=CONNECT
TABLE_TYPE=PIVOT
TABNAME=dipendenti_detail
OPTION_LIST='user=connect,PivotCol=campo,FncCol=valore,Function=MAX';

The table is created correctly; however, when I select from it, I get an unexpected result:

id_dipendente id_azienda id_sede revisione_documento ID Ente Esterno ID Ruolo Qualifica Ruolo test ICE in caso di emergenza Contatto di Emergenza tel familiare
187 2 98 0
187 2 98 0 1
187 2 98 0 Amministrativo - Collaboratore di Amministrazione
187 2 98 0 Dipendente
187 2 98 0
187 2 98 0 9a125ef2-24ec-4f57-97a6-76365b490bce
188 2 98 0
188 2 98 0 1
188 2 98 0 Amministrativo - Collaboratore di Amministrazione
188 2 98 0 Dipendente
188 2 98 0 9becc99d-3b41-4276-89fc-4dbbb1cd6b4e

Here you can see that, while I would have expected a single for for each (id_dipendente, id_azienda, id_sede, revisione_documento) 4-tuple, instead I get one row for each detail field.

Did I create the PIVOT table with the wrong definition, or is it an error in the CONNECT engine itself?

I am currently using MariaDB 10.6.12 on Ubuntu 22.04.

EDIT:

Given that the original table structure does not actually need aggregation, I also tried to define the PIVOT table as:

CREATE OR REPLACE TABLE dipendenti_detail_pivot
ENGINE=CONNECT
TABLE_TYPE=PIVOT
TABNAME=dipendenti_detail
OPTION_LIST='user=connect,PivotCol=campo,FncCol=valore,GroupBy=1';

But when I select from it, the result is the same.

7

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.