Traslazione dai tabella da righe a colonne

di il
7 risposte

Traslazione dai tabella da righe a colonne

Ciao
mi è stato passato questo problema: devo traslare delle righe in colonne, mi spiego meglio

ho queste tabelle
TABELLA ESAMI medici
COD ESA CHAR(2)
DES ESA CHAR(20)

TABELLA RILEVAZIONI
COD CLI CHAR(5)
DATA DATE
COD ESA CHAR(3)
VAL ESA CHAR(15)

questa tabella contiene le rilevazioni fatte dal cliente


ESEMPIO DI VALORI NELLE TABELLE

ESAMI:
01 PRESSIONE MINIMA
02 PRESSIONE MASSIMA
03 TEMPERATRURA
04 GLICEMIA


RILEVAZIONI
00001 01/01/2021 01 70
00001 01/01/2021 02 140
00001 01/01/2021 03 36,6

00001 02/01/2021 01 75
00001 02/01/2021 02 1135
00001 02/01/2021 03 37,0

00001 03/01/2021 01 65
00001 03/01/2021 02 120
00001 03/01/2021 03 36,8

00001 04/01/2021 01 78
00001 04/01/2021 02 137
00001 04/01/2021 03 38,4

00001 01/02/2021 01 78
00001 01/02/2021 02 137
NOTARE CHE PER IL 01/02/2021 MANCA LA TEMPERATURA e la glicemia non è stata mai misurata


RISULTATO DA OTTENERE *** senza codice ma solo con query (non chiedetemi perché!) ***
COD CLI - DATA - COD ESA - VALORE - DATA - COD ESA - VALORE - DATA - COD ESA - VALORE
00001 - 01/02/2021 - 01 - 78 - 01/02/2021 - 02 - 137 - 04/01/2021 - 03 - 38,4

i trattini sono stati messi solo per dividere i campi

in pratica per ogni esame devo tovare l'ultimo fatto, quello in cui (per quell'esame) la data sia MAX. Alla fine ottengo 1 solo valore per ciascuno degli esami fatti da ogni cliente.


riesco ad ottenere i dati come righe di una query, ma come faccio ad ottenerne una sola riga, considerando che gli esami non so a priori quanti possono essere, che variano numericamente nel tempo (potrei aggiungere la glicemia per un cliente ma non per un altro)?

grazie

P.S. andrebbe bene anche se dovessi ottenere nella riga "unica" dei valori a null per gli esami non fatti da quel cliente

7 Risposte

  • Re: Traslazione dai tabella da righe a colonne

    Sei sicuro di voler fare una cosa "corretta/ortodossa"? Se un Cliente fa 20-50 Rilevazioni...dove le vai a scrivere tutte in orizzontale?
  • Re: Traslazione dai tabella da righe a colonne

    Ho corretto la domanda. mi sono dimenticato di scrivere che per OGNI esame mi interessa solo l'ultimo temporalmente effettuato. Per me era talmente scontato che ho dimenticato di scriverlo in chiaro anche se dal risultato voluto si vedeva che c'era solo l'ultima data in cui è stato fatto ogni esame.
    Gli esami possono anche essere 20/30 se un cliente eseguisse 20/30 esami diversi.

    grazie
  • Re: Traslazione dai tabella da righe a colonne

    RedWolf63 ha scritto:


    Ho corretto la domanda. mi sono dimenticato di scrivere che per OGNI esame mi interessa solo l'ultimo temporalmente

    RedWolf63 ha scritto:


    RISULTATO DA OTTENERE *** senza codice ma solo con query (non chiedetemi perché!) ***
    COD CLI - DATA - COD ESA - VALORE - DATA - COD ESA - VALORE - DATA - COD ESA - VALORE
    00001 - 01/02/2021 - 01 - 78 - 01/02/2021 - 02 - 137 - 04/01/2021 - 03 - 38,4
    Qui io vedo date diverse.

    Credo tu debba lavorare su 2 passaggi logici:
    1. La query deve contenere il campo Data e su di esso imposti il Max (in visualizzazione struttura query, clicca in alto sul tasto Totali, poi cambi da Raggruppamento in Max)
    2. Per ottenere quell'effetto orizzontale (che per poche righe si può pensare di fare)...serve la nota funzione di concatenazione di Allen Browne
    http://allenbrowne.com/func-concat.htm
  • Re: Traslazione dai tabella da righe a colonne

    Ti chiedo scusa, ma ho copiato (e male) e sono maledettamente di fretta. Ora ho corretto. Come vedi prende il valore degli esami 01 e 02 dal 1 di febbraio ed il valore dell'esame 03 dal 4 gennaio. Mi è stato chiesto di farlo con una query SENZA codice. grazie ancora e scusami per il refuso
  • Re: Traslazione dai tabella da righe a colonne

    RedWolf63 ha scritto:


    Come vedi prende il valore degli esami 01 e 02 dal 1 di febbraio ed il valore dell'esame 03 dal 4 gennaio.
    Quindi il "criterio" quale sarebbe?

    RedWolf63 ha scritto:


    Mi è stato chiesto di farlo con una query SENZA codice.
    Per la "concatenazione" devi per forza mettere mano alla funzione di Allen Browne, da scrivere in un Modulo come Public Function. La query deve avere un campo che richiama il nome della Function e i nomi-campi da passare alla Function stessa, per poi ricevere il risultato concatenato finale.
  • Re: Traslazione dai tabella da righe a colonne

    E' proprio questo il problema, non scrivere codice. non vogliono farlo. Ho trovato questo esempio, ma non mi soddisfa:
    TRANSFORM Last(Tabella1.valore) AS UltimoDivalore
    SELECT Tabella1.cliente
    FROM Tabella1
    GROUP BY Tabella1.cliente
    PIVOT Tabella1.codice;
  • Re: Traslazione dai tabella da righe a colonne

    Se il link che ti ho indicato non è chiaro, prova a leggere anche questo


    Se hai problemi a fare tutto insieme (filtrare ultima Data e concatenare), suddividi su 2 query. La prima filtra UltimaData, la seconda poggia sulla prima query e fa la concatenazione con la Function.
Devi accedere o registrarti per scrivere nel forum
7 risposte