Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    162

    Query di Raggruppamento con Sql server 2005

    Salve, avrei bisogno di capire come poter gestire questa situazione:

    Ho una tabella con un campo IDStatus(di tipo int) dove può essere 50(valore accettato),90(valore negato) e poi ho un campo IDLeaveType( di tipo int) che può essere 1-Allattamento,2-Ferie,3-Malattia,4-Matrimonio,5-Varie e in base a questi due filtri devo raggruppare in una tabella così disposta


    Allattamento Totale Accettate Rifiutate



    Raggruppate appunto per utente quindi con un altro filtro che si basa sull'utente loggato

    Qualcuno potrebbe darmi un suggerimento?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Non ho capito se il tuo problema è fare il raggruppamento, in quanto tale, oppure se è quello di suddividere i dati su più colonne

    Allattamento Totale Accettate Rifiutate

    Hai provato con il CASE WHEN.... ?
    E poi con il GROUP BY ?

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    162
    Il mio problema era avere un suggerimento su come suddividere in più colonne una situazione del genere.


    Quindi tu mi consigli il CASE WHEN?

  4. #4

  5. #5
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Però sarebbe meglio vedere la tabella, incluso i dati, per capire bene come fare.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    162
    Ciao, io ho sviluppato la query così:

    codice:
    SELECT Let.leaTitle as Tipo,COUNT(Lea.IDStatus) as Totale,
       
    CASE Let.leaTitle 
    WHEN 'Ferie' THEN 
    CASE Lea.IDStatus WHEN 50 THEN  COUNT(isnull(Lea.IDStatus,0))
    WHEN 90 THEN  COUNT(isnull(Lea.IDStatus,0)) END
    
          WHEN 'Allattamento' THEN 
    CASE Lea.IDStatus WHEN 50 THEN  COUNT(isnull(Lea.IDStatus,0))
     WHEN 90 THEN  COUNT(isnull(Lea.IDStatus,0)) END
           
          WHEN 'Esame scolastico' THEN
     CASE Lea.IDStatus WHEN 50 THEN  COUNT(isnull(Lea.IDStatus,0))
      WHEN 90 THEN  COUNT(isnull(Lea.IDStatus,0)) END
            
          WHEN 'Licenza matrimoniale' THEN 
    CASE Lea.IDStatus WHEN 50 THEN  COUNT(isnull(Lea.IDStatus,0)) 
    WHEN 90 THEN  COUNT(isnull(Lea.IDStatus,0)) END
          
          WHEN 'Visita medica' THEN 
    CASE Lea.IDStatus WHEN 50 THEN  COUNT(isnull(Lea.IDStatus,0)) 
    WHEN 90 THEN  COUNT(isnull(Lea.IDStatus,0)) END
    
    END
            
    FROM [BSPF_GLOB].[dbo].[leaveRequest] Lea INNER JOIN [BSPF_GLOB].[dbo].[leaveType] Let ON Lea.IDLeaveType = Let.IDLeaveType
    WHERE Lea.IDUser =69 
    Group By Let.leaTitle,Lea.IDStatus
    Il problema è che non riesco a far visualizzare la terza colonna che mi serve e che corrisponderebbe alla colonna Rifiutate.

    Pensi che vada bene?

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    162
    Nessuno mi può dare un altro piccolo suggerimento

  8. #8
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Queste istruzioni non vanno bene:
    codice:
    CASE Lea.IDStatus WHEN 50 THEN  COUNT(isnull(Lea.IDStatus,0)) 
    WHEN 90 THEN  COUNT(isnull(Lea.IDStatus,0)) END
    perchè ti mostra il valore nella stessa colonna

    Per separare su due colonne, modificalo così
    codice:
    CASE Lea.IDStatus WHEN 50 THEN  COUNT(isnull(Lea.IDStatus,0)) ELSE 0 END As Accettate
    ,CASE Lea.IDStatus WHEN 90 THEN  COUNT(isnull(Lea.IDStatus,0)) ELSE 0 END As Rifiutate
    Così otterrai 2 colonne: Accettate e Rifiutate

    Ciao

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    162
    Ma io l'avevo anche fatto come tu mi hai postato e mi dava errore,infatti ho voluto riprovare e mi da errore sia su :

    as Accettate che sulla virgola nel caso elimino l'as

  10. #10
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Azz... ho scritto di getto senza controllare la tua sintassi, presumendo che tu l'abbia messa corretta... Invece è sbagliata.
    Scusa, ma di solito io metto la virgola all'inizio della stringa, così io posso commentare qualsiasi riga e la query funziona sempre.

    La sintassi corretta è questa:

    codice:
    SELECT Let.leaTitle as Tipo
       ,COUNT(Lea.IDStatus) as Totale
       ,CASE WHEN Lea.idstatus=50 THEN COUNT(Isnull(Lea.IDStatus,0)) ELSE 0 END AS Accettate
       ,CASE WHEN Lea.idstatus=90 THEN COUNT(Isnull(Lea.IDStatus,0)) ELSE 0 END AS Rifiutate
    
    -- continua con il resto del codice
    Ciao

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 © 2025 vBulletin Solutions, Inc. All rights reserved.