Query unione troppo complessa

di il
5 risposte

Query unione troppo complessa

Buonasera a tutti,
prima di tutto vi ringrazio per l'enorme quantità di informazioni che condividete. Visito il vostro forum ogni volta ho qualche dubbio nella compilazione e riesco praticamente sempre a trovare una soluzione.
A titolo di presentazione, mi chiamo Mario, e per lavoro o per personali esigenze mi trovo spesso a realizzare semplici applicativi in VBA e SQL.

Attualmente mi sto occupando della creazione di un semplice sistema di gestione dello scarto industriale. Ho già realizzato diverse versioni e di tanto in tanto apporto alcuni miglioramenti.

La mia attuale esigenza è di creare un grafico a barre, con colonne sovrapposte. In particolare, per ogni UTE (linea di produzione) dovrà corrispondere una colonna divisa in tre settori a quantificare lo scarto a rottame, il rilavorabile e quello attribuibile a fornitore. Tutto ciò in un intervallo temporale definito.

Per generare il grafico ho quindi scritto la seguente query:
SELECT (UTE) AS Linea, Sum(Rottame) AS [Scarto Rottame], Sum(Rilavorabile) AS [Scarto Rilavorabile], Sum(Fornitore) AS [Scarto Fornitore]


FROM (

SELECT Scarti.UTE AS [UTE], Scarti.Quantità AS [Rottame], NULL AS [Rilavorabile],  NULL AS [Fornitore], Scarti.Quantità AS [Totale], Scarti.Data AS [Data]
FROM Scarti
WHERE (Tipologia_scarto)="Rottame"

UNION ALL

SELECT Scarti.UTE AS [UTE],   NULL AS [Rottame], Scarti.Quantità AS [Rilavorabile], NULL AS [Fornitore], Scarti.Quantità AS [Totale], Scarti.Data AS [Data]
FROM Scarti
WHERE  (Tipologia_scarto)="Rilavorabile"


UNION ALL

SELECT Scarti.UTE AS [UTE],   NULL AS [Rottame], NULL AS [Rilavorabile] , Scarti.Quantità AS [Fornitore], Scarti.Quantità AS [Totale], Scarti.Data AS [Data]
FROM Scarti
WHERE  (Tipologia_scarto)="Fornitore"


)


WHERE (Data)<=FormDataFin AND (Data)>= FormDataIn


GROUP BY UTE
ORDER BY Sum(Totale) DESC;
In questo modo le tre colonne vengono popolate progressivamente dalle tre tipologie di scarto.

Purtroppo però Access mi da l'errore "L'espressione è stata digitata in modo non corretto o è troppo complessa per essere valutata".

Se banalmente elimino uno dei tre select, con due il problema non sussiste. Potreste darmi una mano?

Vi ringrazio anticipatamente per la disponibilità.

5 Risposte

  • Re: Query unione troppo complessa

    In questi casi potrebbe esserci un ERRORE di sintassi...!
    Proverei a suggerirti di costruire 3 Queries SINGOLE... e verificare che singolarmente diano risultati coerenti, poi inizi a mettere in UNION una alla volta ...
    
    SELETC * FROM Qry1 UNION (SELECT * FROM QRY2)
  • Re: Query unione troppo complessa

    Ciao Alex e grazie per la risposta.

    Si, pensavo anche io inizialmente ad un errore di sintassi. Ho quindi provato l'esecuzione singola delle tre query, che restituiscono il risultato corretto e coerente tra di loro.

    Inoltre eliminando una qualsivoglia delle tre, lo stesso identico codice con due query e un solo UNION funziona alla perfezione! Aggiungendo il terzo restituisce l'errore.
    Per questo motivo mi ero convinto che il problema potesse essere legato effettivamente alla complessità.

    Cosa ne pensi?
  • Re: Query unione troppo complessa

    mariomc1987 ha scritto:


    Inoltre eliminando una qualsivoglia delle tre, lo stesso identico codice con due query e un solo UNION funziona alla perfezione! Aggiungendo il terzo restituisce l'errore.
    Ciao,
    magari mi sbaglio ma leggendo la tua risposta mi è venuto in mente questo:
    E se provassi a fare la union di 2 sole qualsivoglia Queries e il risultato lo unisci alla terza Query con un secondo passaggio (ovvero una UNION tra le prime 2 già unite e la terza) ti darebbe comunque errore?
  • Re: Query unione troppo complessa

    Ciao Angelo,
    il concetto potrebbe essere corretto! Grazie. Ora provo a metterlo in pratica e ti aggiorno, perché devo capire bene come fare.
  • Re: Query unione troppo complessa

    Angelo_Tbp ha scritto:


    E se provassi a fare la union di 2 sole qualsivoglia Queries e il risultato lo unisci alla terza Query con un secondo passaggio (ovvero una UNION tra le prime 2 già unite e la terza) ti darebbe comunque errore?
    Carissimo,
    l'idea ha funzionato. Anche se non è il massimo dell'eleganza, ho fatto la "matriosca" e funziona perfettamente!
    Sapevo di essermi rivolto nel posto giusto.

    Ecco il codice attuale:
    SELECT (Linea) AS [Linea di produzione], Sum(Scarto_Rottame) AS [Scarto Rottame], Sum(Scarto_Rilavorabile) AS [Scarto Rilavorabile], Sum(Scarto_Fornitore) AS [Scarto Fornitore]
    
    FROM (
    
    SELECT (UTE) AS [Linea], Sum(Rottame) AS [Scarto_Rottame], Sum(Rilavorabile) AS [Scarto_Rilavorabile], Sum(Fornitore) AS [Scarto_Fornitore], Sum(Totale) AS [Scarto_totale]
    
    FROM (
    
    
    SELECT Scarti.UTE AS [UTE], Scarti.Quantità AS [Rottame], NULL AS [Rilavorabile],  NULL AS [Fornitore], Scarti.Quantità AS [Totale]
    FROM Scarti
    WHERE (Tipologia_scarto)="Rottame" AND (Data)<=FormDataFin AND (Data)>= FormDataIn
    
    UNION ALL
    
    SELECT Scarti.UTE AS [UTE],   NULL AS [Rottame], Scarti.Quantità AS [Rilavorabile], NULL AS [Fornitore], Scarti.Quantità AS [Totale]
    FROM Scarti
    WHERE  (Tipologia_scarto)="Rilavorabile" AND (Data)<=FormDataFin AND (Data)>= FormDataIn
    
    )
    
    
    GROUP BY UTE
    
    UNION ALL
    
    SELECT Scarti.UTE AS [UTE],   NULL AS [Rottame], NULL AS [Rilavorabile] , Scarti.Quantità AS [Fornitore], Scarti.Quantità AS [Totale]
    FROM Scarti
    WHERE  (Tipologia_scarto)="Fornitore" AND (Data)<=FormDataFin AND (Data)>= FormDataIn
    
    
    )
    
    
    GROUP BY Linea
    ORDER BY Sum(Scarto_totale) DESC;
    
    Certo continuo ad essere curioso del motivo per il quale genera quell'errore, ma per ora il problema è risolto.

    Grazie infinite per il fondamentale suggerimento!
Devi accedere o registrarti per scrivere nel forum
5 risposte