Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di cms9651
    Registrato dal
    Mar 2010
    Messaggi
    107

    [SQL Server 2008] Problemi con clausola GROUP BY

    Ciao a tutti.

    Non riesco a far funzionare come vorrei questa query.

    questo è l'output attuale:
    codice:
    Q MAT NUMBER
    1F MOL 103623
    1F MOL 103623
    1D LIP 69119
    1D LIP 69119
    Invece avrei bisogno di questo:
    codice:
    Q       MAT     NUMBER
    1F      MOL     103623
    1D      LIP     69119
            Tot     172742
    Potreste aiutarmi?
    Grazie
    codice:
    SELECT
            strDTZZ AS Q,
            COALESCE ([MAT], 'Tot') AS [MAT],
            NUMBER
    FROM
            (
                    SELECT
                            LEFT (DTZZ, 2) AS strDTZZ,
                            CASE
                    WHEN LEFT (TZZ, 2) = '1D' THEN
                            'LIP'
                    WHEN LEFT (TZZ, 2) = '1F' THEN
                            'MOL'
                    WHEN LEFT (TZZ, 2) = '1G' THEN
                            'IRT'
                    WHEN LEFT (TZZ, 2) = '1H' THEN
                            'MRE'
                    WHEN LEFT (TZZ, 2) = '1I' THEN
                            'UOT'
                    WHEN LEFT (TZZ, 2) = '1M' THEN
                            'MAL'
                    WHEN LEFT (TZZ, 2) = '1S' THEN
                            'RAS'
                    WHEN LEFT (TZZ, 2) = '1O' THEN
                            'PMC'
                    WHEN LEFT (TZZ, 2) = '1P' THEN
                            'BUP'
                    WHEN LEFT (TZZ, 2) = '1Q' THEN
                            'LAC'
                    ELSE
                            'CIS'
                    END AS MAT,
                    COUNT (*) AS NUMBER,
                    FROM
                            dbo_40
                    GROUP BY 
                    ROLLUP ( LEFT (DTZZ, 2),                        
                            CASE
                    WHEN LEFT (TZZ, 2) = '1D' THEN
                            'LIP'
                    WHEN LEFT (TZZ, 2) = '1F' THEN
                            'MOL'
                    WHEN LEFT (TZZ, 2) = '1G' THEN
                            'IRT'
                    WHEN LEFT (TZZ, 2) = '1H' THEN
                            'MRE'
                    WHEN LEFT (TZZ, 2) = '1I' THEN
                            'UOT'
                    WHEN LEFT (TZZ, 2) = '1M' THEN
                            'MAL'
                    WHEN LEFT (TZZ, 2) = '1S' THEN
                            'RAS'
                    WHEN LEFT (TZZ, 2) = '1O' THEN
                            'PMC'
                    WHEN LEFT (TZZ, 2) = '1P' THEN
                            'BUP'
                    WHEN LEFT (TZZ, 2) = '1Q' THEN
                            'LAC'
                    ELSE
                            'CIS'
                    END
                    )
            ) AS SubQ
    WHERE
            1 = 1 
    AND (strDTZZ = '1D' OR strDTZZ = '1F');

  2. #2
    ci dici troppo poco. comunque

    1. prova una distinct
    2. prova a scrivere in una temp, poi rielabori la temp (il totale stampalo dall'applicativo, non da sql)

  3. #3
    Utente di HTML.it L'avatar di cms9651
    Registrato dal
    Mar 2010
    Messaggi
    107
    Originariamente inviato da optime
    ci dici troppo poco. comunque

    1. prova una distinct
    2. prova a scrivere in una temp, poi rielabori la temp (il totale stampalo dall'applicativo, non da sql)
    Grazie, con la DISTINCT ottengo quasi l'output che mi interessa, perchè non so perchè non mi stampa il totale che richiedo con il COALESCE:
    codice:
    Q 	MAT	NUMBER
    1F	MOL	103623
    1D	LIP	69119
    Quali altre info possono esserti utili?

  4. #4
    te l'ho già detto, il totale IMHO lo devi stampare da applicativo (poi COALESCE mica fa le somme...)

  5. #5
    Utente di HTML.it L'avatar di cms9651
    Registrato dal
    Mar 2010
    Messaggi
    107
    Originariamente inviato da optime
    te l'ho già detto, il totale IMHO lo devi stampare da applicativo (poi COALESCE mica fa le somme...)
    Ok, ho capito grazie... volevo dire che chiedo il totale con il with rollup ...

  6. #6
    Originariamente inviato da cms9651
    Ok, ho capito grazie... volevo dire che chiedo il totale con il with rollup ...
    ad occhio e croce credo che si possa fare con le clausola rollup / compute by e compagnia bella;
    ... però senza sapere come è fatta la tabella...

    anzi , IMHO , è sempre opportuno postare :

    - CREATE TABLE
    - INSERT INTO per creare dati sensati che mettano in rilevo eventuali difficoltà
    - Il risultato desiderato congruente con i dati di cui sopra.

    perchè chi volesse provare a dare una risposta facendo prima delle prove
    non sarebbe costretto a ricrearsi la tua situazione.

    Per finire devo dire che concordo con optime quando dice
    che l'impaginazione e formattazione dei dati è meglio farla
    da applicativo piuttosto che da query perché i dbms
    sono pensati per gestire dati e non come generatori di reports

  7. #7
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Originariamente inviato da sspintux
    Per finire devo dire che concordo con optime quando dice
    che l'impaginazione e formattazione dei dati è meglio farla
    da applicativo piuttosto che da query perché i dbms
    sono pensati per gestire dati e non come generatori di reports


    Concordo anch'io: ___ Certamente meglio fare i totali nell'applicativo,

    Il DataBase ( Come da nome ) è la base dei dati
    e non un generatore di Report

    ______________________________________________

    Ma se proprio vuoi fare i totali nel DB potresti:

    Prendere la DISTINCT che hai gia creato
    Su quella ti calcoli il Totale
    Dopo fai una UNION fra la tua DISTINCT e il Totale Trovato



    Facci sapere

  8. #8
    Utente di HTML.it L'avatar di cms9651
    Registrato dal
    Mar 2010
    Messaggi
    107
    Concordo anch'io su tutta la linea, so che non l'ho detto, ma non utilizzo queste query per applicativi lato server... sono query che vengono eseguite direttamente in sql server... per cui non ho possibilità di calcolare i totali nell'applicativo visto che questo semplicemente non esiste...

    Ma se proprio vuoi fare i totali nel DB potresti:

    Prendere la DISTINCT che hai gia creato
    Su quella ti calcoli il Totale
    Dopo fai una UNION fra la tua DISTINCT e il Totale Trovato
    Grazie, puoi spiegarti meglio?

  9. #9
    la tua select la butti in una temp

    poi fai

    select campo from #tmp
    union
    select sum(campo) from #tmp

    questa l'idea, poi adattala

  10. #10
    Utente di HTML.it L'avatar di cms9651
    Registrato dal
    Mar 2010
    Messaggi
    107
    Grazie, ma con il passaggio in tabella temp l'output sarà come mi serve?

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.