Query sql ordinamento orizzontale dei record

di il
4 risposte

Query sql ordinamento orizzontale dei record

Buongiorno,

Ho un grafico Excel a cui devo passare un result di dati in base ad un certo periodo.
Il primo result che ho ottenuto dalla query che ho costruito è il seguente:
Data	        Code Description             Value
Jan-21	2506	                               0,024
Feb-21	2506                                0,024
Mar-21	2506                                0,024
Apr-21	2506	                               0,024
May-21	2506	                               0,024
Jun-21	2506                         	 0,02
Jul-21	2506	                               0,044
Aug-21	2506	                               0,047
Sep-21	2506	                               0,047
Oct-21	2506	                               0,047
Nov-21	2506	                               0,047
Dec-21	2506	                               0,043
Aug-21	2506A3	                       0,001
Sep-21	2506A3	                       0,001
Oct-21	2506A3	                       0,001
Nov-21	2506A3	                       0,001
Dec-21	2506A3	                       0,001
Adesso se passo questi dati al grafico non va bene in quanto nell'asse delle X va il periodo e non possono esserci periodi duplicati e ovviamente nell'asse delle Y ci vanno i valori che in questo caso essendoci due codici diverse ci saranno due linee a rappresentare l'andamento dei valori. Ora mi sono accorto che avendo i valori esplosi verticalmente escono periodi duplicati (giustamente) e solo una linea che prende tutti i valori di entrambi i codici.
A questo punto stavo pensando se era possibile creare una query da questo sorgente dati che mi mette in group by il periodo così da non far uscire i duplicati ma i codici con i rispettivi valori inserirli orizzontalmente, come nell'esempio successivo:
Data	        Code Description1 	value1	Code Description2	value2
Jan-21	2506	                        0,024		
feb-21	2506        	                0,024		
mar-21	2506	                        0,024		
apr-21	2506	                        0,024		
May-21	2506	                        0,024		
Jun-21	2506	                          0,02		
Jul-21	2506	                        0,044		
Aug-21	2506	                        0,047	                2506A3	0,001
Sep-21	2506	                        0,047	                2506A3	0,001
Oct-21	2506	                        0,047	                2506A3	0,001
nov-21	2506	                        0,047	                2506A3	0,001
Dec-21	2506	                        0,043	                2506A3	0,001
Spero solo di essermi fatto capire

Grazie mille per l'aiuto

4 Risposte

  • Re: Query sql ordinamento orizzontale dei record

    Purtroppo non ho capito bene il tuo problema.

    Parli di un foglio di Excel e poi di una query (resultset).
    Nel caso di Excel le cose si possono fare un po' da una parte e un po' dall'altra, per esempio:
    - Lasci la query com'è e poi te la giochi con le tabelle pivot su Excel direttamente
    - Cambi la query per avere il risultato esattamente come lo vuoi


    Nel primo caso, guardati un po' di documentazione sulle tabelle pivot di Excel, ci sono un sacco di esempi ed eventualmente se non te la cavi, puoi aprire un altro post su Excel (e non su SQL)

    Nel secondo caso, deduco tu stia usando Sql Server (sei in questa sezione del sito). In tal caso può essere che la clausola PIVOT faccia al caso tuo? Se la cerchi nella documentazione Microsoft trovi la spiegazione con diversi esempi
  • Re: Query sql ordinamento orizzontale dei record

    Aspetta, sicuramente non mi sono spiegato bene io in sql devo creare una query per ottenere come risultato il secondo esempio poi questo risultato lo leggo in visual studio dove ho un codice che passo questi dati per ottenere un grafico sotto excel.

  • Re: Query sql ordinamento orizzontale dei record

    Se passi da Visual Studio (quindi codice .NET), puoi sempre farti dare il dettaglio (prima query) e poi lavorarci lato .NET
    Sicuramente è meno performante, però in diversi casi è più comodo per ottenere quello che si desidera.

    Hai provato a dare un'occhiata alla clausola PIVOT di SqlServer? Può essere che con quella si riesca ad ottenere quanto richiesto.

    Qui trovi la documentazione Microsoft
  • Re: Query sql ordinamento orizzontale dei record

    Ciao col Pivot sql gli si deve dire quali colonne si devono gestire io invece le devo creare dinamicamente.
    Adesso un un ciclo sono riuscito a creare un datatable con le colonne che hanno il nome che desidero.
    Però non so come prendere i dati delle righe e salvarli sotto le colonne specifiche.
    Faccio un esempio con dati:

    Table 1
    PeriodProcess FacilityCode MocTag
    Jan-21 2506 0.024
    Feb-21 2506 0.024
    Mar-21 2506 0.024
    Apr-21 2506 0.024
    May-21 2506 0.024
    Jun-21 2506 0.020
    Jul-21 2506 0.044
    Aug-21 2506 0.047
    Sep-21 2506 0.047
    Oct-21 2506 0.047
    Nov-21 2506 0.047
    Dec-21 2506 0.043
    Aug-21 2506A3 0.001
    Sep-21 2506A3 0.001
    Oct-21 2506A3 0.001
    Nov-21 2506A3 0.001
    Dec-21 2506A3 0.001

    adesso ciclando questa tabella ho detto che al cambio della FacilityCode mi aggiunge una colonna con nome della FacilityCode

    pertanto ho creato una tabella Tab2 solo con il campo Periodo

    e alla fine del ciclo sono riuscito ad avere una tabella con queste colonne:

    PERIODO - 2506 - 2506A3

    Adesso alla tabella Tab devo aggiungere i valori presenti nella tabella Tab1, calcolando che i FacilityCode in base all'estrazione da database possono essere a volte solo 1 oppure 2 come nel mio esempio oppure molti di +.

    stando al mio esempio il risultato finale della tabella dovrebbe essere così:

    Periodo 2506 2506A3
    -----------------------------------
    Jan-21 0.024 0
    feb-21 0.024 0
    mar-21 0.024 0
    apr-21 0.024 0
    May-21 0.024 0
    Jun-21 0.020 0
    Jul-21 0.044 0
    Aug-21 0.047 0.001
    Sep-21 0.047 0.001
    Oct-21 0.047 0.001
    nov-21 0.047 0.001
    Dec-21 0.043 0.001
Devi accedere o registrarti per scrivere nel forum
4 risposte