Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di cms9651
    Registrato dal
    Mar 2010
    Messaggi
    107

    [SQL Server 2008] Utilizzo clausola ORDER BY in query UNION

    Ciao a tutti.

    Cosa c'è di sbagliato in questa query UNION?
    Perchè restituisce questo errore?
    I campi che richiamo non sono tutti validi?
    Grazie---

    [Err] 42000 - [SQL Server]Se l'istruzione ORDER BY include l'operatore UNION,
    INTERSECT o EXCEPT, gli elementi dell'istruzione devono essere specificati nell'elenco di selezione.
    codice:
    SELECT
            [MAT],
            [NUMBER]
    FROM
            TestTable
    UNION
            SELECT
                    COALESCE ([MAT], 'Tot') AS [MAT],
                    SUM ([NUMBER])
            FROM
                    TestTable
            GROUP BY
                    ROLLUP ([MAT])
            ORDER BY
                    CASE ([MAT])
            WHEN 'mol' THEN
                    1
            WHEN 'lip' THEN
                    2
            WHEN 'mre' THEN
                    3
            WHEN 'irt' THEN
                    4
            WHEN 'pmc' THEN
                    5
            WHEN 'mal' THEN
                    6
            WHEN 'ras' THEN
                    7
            WHEN 'uot' THEN
                    8
            WHEN 'lac' THEN
                    9
            WHEN 'bup' THEN
                    10
            ELSE
                    11
            END;

  2. #2
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955

    Re: [SQL Server 2008] Utilizzo clausola ORDER BY in query UNION

    Originariamente inviato da cms9651
    Ciao a tutti.

    Cosa c'è di sbagliato in questa query UNION?
    Perchè restituisce questo errore?
    I campi che richiamo non sono tutti validi?
    Grazie---


    codice:
    SELECT
            [MAT],
            [NUMBER]
    FROM
            TestTable
    UNION
            SELECT
                    COALESCE ([MAT], 'Tot') AS [MAT],
                    SUM ([NUMBER])
            FROM
                    TestTable
            GROUP BY
                    ROLLUP ([MAT])
            ORDER BY
                    CASE ([MAT])
            WHEN 'mol' THEN
                    1
            WHEN 'lip' THEN
                    2
            WHEN 'mre' THEN
                    3
            WHEN 'irt' THEN
                    4
            WHEN 'pmc' THEN
                    5
            WHEN 'mal' THEN
                    6
            WHEN 'ras' THEN
                    7
            WHEN 'uot' THEN
                    8
            WHEN 'lac' THEN
                    9
            WHEN 'bup' THEN
                    10
            ELSE
                    11
            END;
    Non ha senso specificare una clausola di ORDER BY nella sola UNION. L'altra tabella (TestTable) non deve ordinare?

    Devi fare una select cappello sulla quale applicare l'order by (che deve essere globale all'elenco dei risultati delle due query in union tra loro)

  3. #3
    Utente di HTML.it L'avatar di cms9651
    Registrato dal
    Mar 2010
    Messaggi
    107
    Grazie mille !
    codice:
    SELECT
    	[MAT],
    	[NUMBER]
    FROM
    	(
    		SELECT
    			[MAT],
    			[NUMBER]
    		FROM
    			TestTable
    		UNION
    			SELECT
    				COALESCE ([MAT], 'Tot') AS [MAT],
    				SUM ([NUMBER])
    			FROM
    				TestTable
    			GROUP BY
    				ROLLUP ([MAT])
    	) subQ
    ORDER BY
    	CASE ([MAT])
    WHEN 'mol' THEN
    	1
    WHEN 'lip' THEN
    	2
    WHEN 'mre' THEN
    	3
    WHEN 'irt' THEN
    	4
    WHEN 'pmc' THEN
    	5
    WHEN 'mal' THEN
    	6
    WHEN 'ras' THEN
    	7
    WHEN 'uot' THEN
    	8
    WHEN 'lac' THEN
    	9
    WHEN 'bup' THEN
    	10
    ELSE
    	11
    END;

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.