Query campi incrociati

di il
3 risposte

Query campi incrociati

Buon giorno a tutti
Ho questo problema.
Ho creato su una tabella di scadenze dei miei fornitori una query a campi incrociati dove su ogni riga vedo le date di scadenze delle fatture ripartite per mesi
Quindi ho diverse colonne (gen - feb - marz...ecc.)
Il mio problema è che anche le date di scadenza di fatture dell'anno passato (es.31/12/14) vengono ovviamente classificate nella colonna di dicembre mischiate con quelle del 2015
Come faccio a creare una colonna scaduto per tutte le date che sono antecedenti al 2015 ??? e quindi poi ripartire le altre nei vari mesi?

3 Risposte

  • Re: Query campi incrociati

    Praticamente la mia istruzione SQL della query a campi incrociati è questa:

    TRANSFORM Sum([Scadenze fornitori aperte].[Importo da pagare]) AS [SommaDiImporto da pagare]
    SELECT [Scadenze fornitori aperte].Protocollo, [Scadenze fornitori aperte].[Num fattura], [Scadenze fornitori aperte].[Data fattura], [Scadenze fornitori aperte].Totfatt, [Scadenze fornitori aperte].Società, [Scadenze fornitori aperte].[Data scadenza], [Scadenze fornitori aperte].[Tipo pagamento], Sum([Scadenze fornitori aperte].[Importo da pagare]) AS [Totale di Importo da pagare]
    FROM [Scadenze fornitori aperte]
    GROUP BY [Scadenze fornitori aperte].Protocollo, [Scadenze fornitori aperte].[Num fattura], [Scadenze fornitori aperte].[Data fattura], [Scadenze fornitori aperte].Totfatt, [Scadenze fornitori aperte].Società, [Scadenze fornitori aperte].[Data scadenza], [Scadenze fornitori aperte].[Tipo pagamento]
    PIVOT Format([Data scadenza],"mmm") In ("gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic");

    dovrei solo distinguere l'anno!!
  • Re: Query campi incrociati

    simo27 ha scritto:


    Buon giorno a tutti
    Ho questo problema.
    Ho creato su una tabella di scadenze dei miei fornitori una query a campi incrociati dove su ogni riga vedo le date di scadenze delle fatture ripartite per mesi
    Quindi ho diverse colonne (gen - feb - marz...ecc.)
    Il mio problema è che anche le date di scadenza di fatture dell'anno passato (es.31/12/14) vengono ovviamente classificate nella colonna di dicembre mischiate con quelle del 2015
    Come faccio a creare una colonna scaduto per tutte le date che sono antecedenti al 2015 ??? e quindi poi ripartire le altre nei vari mesi?
    TRANSFORM Sum([Scadenze fornitori aperte].[Importo da pagare]) AS [SommaDiImporto da pagare]
    SELECT [Scadenze fornitori aperte].Protocollo, [Scadenze fornitori aperte].[Num fattura],
    [Scadenze fornitori aperte].[Data fattura], [Scadenze fornitori aperte].Totfatt,
    [Scadenze fornitori aperte].Società, [Scadenze fornitori aperte].[Data scadenza],
    [Scadenze fornitori aperte].[Tipo pagamento], 
    Sum([Scadenze fornitori aperte].[Importo da pagare]) AS [Totale di Importo da pagare]
    FROM [Scadenze fornitori aperte]
    GROUP BY [Scadenze fornitori aperte].Protocollo, [Scadenze fornitori aperte].[Num fattura],
    [Scadenze fornitori aperte].[Data fattura], [Scadenze fornitori aperte].Totfatt,
    [Scadenze fornitori aperte].Società, [Scadenze fornitori aperte].[Data scadenza],
    [Scadenze fornitori aperte].[Tipo pagamento]
    PIVOT Format([Data scadenza],"mmm") In ("gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic");
    Proposta alternativa alla query a campi incrociati: non è possibile creare lo stesso risultato in una maschera (o report se ti intessa vedere su stampa) in cui inserire 13 controlli calcolati, 1 per ogni mese e 1 per tutto quello che è precedente all'anno corrente? Che scritto in un altro modo significa: bisogna proprio usare una query a campi incrociati (magari per la sola visualizzazione)?
    In ogni caso provo anche a ragionare sulla query a campi incrociati, così per esercizio personale.
  • Re: Query campi incrociati

    simo27 ha scritto:


    Buon giorno a tutti
    Ho questo problema.
    Ho creato su una tabella di scadenze dei miei fornitori una query a campi incrociati dove su ogni riga vedo le date di scadenze delle fatture ripartite per mesi
    Quindi ho diverse colonne (gen - feb - marz...ecc.)
    Il mio problema è che anche le date di scadenza di fatture dell'anno passato (es.31/12/14) vengono ovviamente classificate nella colonna di dicembre mischiate con quelle del 2015...
    Questa è la proposta di soluzione con query a campi incrociati (ma solo perché era questa la tua richiesta iniziale e perché ero curioso di provare, continuo a suggerire la strada alla mashera / report)
    Il tutto si basa su questo ragionamento: "divido" la tabella di partenza in due, per poter agire sul campo "Data di scadenza" e trasformarlo in valori che poi saranno gestiti dalla query a campi incrociati.
    SELECT 
    [Scadenze fornitori aperte].Protocollo, [Scadenze fornitori aperte].[Num fattura],
    [Scadenze fornitori aperte].[Data fattura], [Scadenze fornitori aperte].Totfatt,
    [Scadenze fornitori aperte].Società, [Scadenze fornitori aperte].[Data scadenza],
    [Scadenze fornitori aperte].[Tipo pagamento], 
    Format([Scadenze fornitori aperte].[Data scadenza],"mmm") As DtScad,
    [Scadenze fornitori aperte].[Importo da pagare]
    WHERE [Scadenze fornitori aperte].[Data scadenza] BETWEEN #01/01/2015# AND #12/31/2015#
    UNION
    SELECT 
    [Scadenze fornitori aperte].Protocollo, [Scadenze fornitori aperte].[Num fattura],
    [Scadenze fornitori aperte].[Data fattura], [Scadenze fornitori aperte].Totfatt,
    [Scadenze fornitori aperte].Società, [Scadenze fornitori aperte].[Data scadenza],
    [Scadenze fornitori aperte].[Tipo pagamento], 
    "AnniPrecedenti" As DtScad,
    [Scadenze fornitori aperte].[Importo da pagare]
    WHERE [Scadenze fornitori aperte].[Data scadenza] < #01/01/2015#
    Questa query nella colonna DtScad mette "gen", "feb", ... "dic" per quello che scade nel 2015, "AnniPrecedenti" per tutto quello che è ante 01/01/2015.
    Su questa poi si crea la query a campi incrociati.
    TRANSFORM Sum([Q1].[Importo da pagare]) AS [TotDaPagare]
    SELECT [Q1].[Protocollo], [Q1].[Num fattura], [Q1].[Data fattura], 
    [Q1].Totfatt, [Q1].Società, [Q1].[Tipo pagamento], [Q1].[DtScad], 
    Sum([Q1].[Importo da pagare]) AS TotDaPagare 
    FROM ( ... vedi query precedente ... ) AS Q1
    GROUP BY [Q1].[Protocollo], [Q1].[Num fattura], [Q1].[Data fattura], [Q1].Totfatt, [Q1].Società, [Q1].[Data scadenza], [Q1].[Tipo pagamento]
    PIVOT [T1].[DtScad]
    Ma... raggruppa a sufficienza?
    Comunque la parte più importante è quella precedente, quella della UNION query. La strada è tracciata, ora si può solo migliorare (o cambiare del tutto, in maschera o report)
Devi accedere o registrarti per scrivere nel forum
3 risposte