Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24

Discussione: Query SUM problematica

  1. #1
    Utente di HTML.it L'avatar di wegawhite
    Registrato dal
    Aug 2004
    Messaggi
    1,400

    Query SUM problematica

    Ciao.

    Ho un problema con una query di estrazione dati; dovrei estrarre da una tbl di mysql così composta:

    Nome, TipoStraordinario e OreStraordinario

    Il Totale delle Ore di straordinario, raggruppate per TipoStraordinario e per ciascun singolo nome.

    Questa è la query (trovata con al ricerca...):

    codice:
    strSQL = " SELECT *, "
       
       strSQL = strSQL & " ( SELECT SUM(ORESTRAORDINARIO) "
       strSQL = strSQL & "   FROM TABELLA WHERE TIPOSTRAORDINARIO = 'FERIALE' ) AS strORESTRAORDINARIOFERIALE, "
       
       strSQL = strSQL & " ( SELECT SUM(ORESTRAORDINARIO) "
       strSQL = strSQL & "   FROM TABELLA WHERE TIPOSTRAORDINARIO = 'FESTIVO' ) AS strORESTRAORDINARIOFESTIVO "   
       
       strSQL = strSQL & " FROM TABELLA"
    
    strSQL = strSQL & " GROUP BY TIPO_STRAORDINARIO "
    Ma mi estrae per tutti i Nomi la somma totale delle OreStraordinario, cioè non le distribuisce per singolo nome... dove sbaglio?

    Grazie-

  2. #2
    perché nelle subquery non c'è group by

  3. #3
    Utente di HTML.it L'avatar di wegawhite
    Registrato dal
    Aug 2004
    Messaggi
    1,400
    Originariamente inviato da optime
    perché nelle subquery non c'è group by
    Ti ringrazio x aver risposto, ma anche così:

    codice:
    strSQL = " SELECT *, "
       
       strSQL = strSQL & " ( SELECT SUM(ORE_STRAORDINARIO) "
       strSQL = strSQL & "   FROM TABELLA WHERE TIPO_STRAORDINARIO = 'FERIALE' GROUP BY TIPO_STRAORDINARIO) AS strORESTRAORDINARIOFERIALE, "
       
       strSQL = strSQL & " ( SELECT SUM(ORE_STRAORDINARIO) "
       strSQL = strSQL & "   FROM TABELLA WHERE TIPO_STRAORDINARIO = 'FESTIVO' GROUP BY TIPO_STRAORDINARIO) AS strORESTRAORDINARIOFESTIVO " 
       
       strSQL = strSQL & " FROM TABELLA "
    Stampa:

    Nome ==== StrFeriale ==== StrFestivo
    Pippo ==== 25 ========= 30
    Pluto ==== 25 ========= 30

    Ma 25 e 30 è la somma totale di tutti le ore straordinarie Feriali e Festive...

  4. #4
    25 a occhio mi sembra diverso da 30. però posso sempre sbagliarmi

  5. #5
    Utente di HTML.it L'avatar di wegawhite
    Registrato dal
    Aug 2004
    Messaggi
    1,400
    Originariamente inviato da optime
    25 a occhio mi sembra diverso da 30. però posso sempre sbagliarmi
    No, non mi sono spiegato.

    Nella tabella:

    Pippo ha fatto 4 ore di straordinario Feriale e 16 ore di straordinario festivo;
    Pluto ha fatto 21 ore di straordinario Feriale e 14 ore di straordinario festivo;

    A me serve questo dato:

    Nome ==== StrFeriale ==== StrFestivo
    Pippo ==== 4 ========= 16
    Pluto ==== 21 ========= 14

    Invece di:
    Nome ==== StrFeriale ==== StrFestivo
    Pippo ==== 25 ========= 30
    Pluto ==== 25 ========= 30

    Mi segui?

  6. #6
    1. se ti serve raggrupare per nome perché raggruppi per tipo?
    2. potresti cambiare completamente approccio. invece di fare le subquery in quel modo, fa' una subquery in union, riportandoti nome, somma ore e tipo, poi nella query esterna vai di group by per nome. ma prova prima 1.

  7. #7
    Utente di HTML.it L'avatar di wegawhite
    Registrato dal
    Aug 2004
    Messaggi
    1,400
    codice:
    <%
    
    strSQL = " SELECT *, "
       
       strSQL = strSQL & " ( SELECT SUM(ORE_STRAORDINARIO) "
       strSQL = strSQL & "   FROM PRESENZE_PERSONALE WHERE TIPO_STRAORDINARIO = 'FERIALE' GROUP BY NOME_DIPENDENTE) AS strORESTRAORDINARIOFERIALE, "
       
       strSQL = strSQL & " ( SELECT SUM(ORE_STRAORDINARIO) "
       strSQL = strSQL & "   FROM PRESENZE_PERSONALE WHERE TIPO_STRAORDINARIO = 'FESTIVO' GROUP BY NOME_DIPENDENTE) AS strORESTRAORDINARIOFESTIVO " 
       
       strSQL = strSQL & " FROM PRESENZE_PERSONALE "
       
       set rs = server.createObject("ADODB.Recordset")
       rs.open strSQL, objconn
       
       If Not Rs.EOF Then
       Do while NOT Rs.EOF
       
       response.write NOME_DIPENDENTE &"
    " &_
                      strORESTRAORDINARIOFERIALE &"
    " &_
                      strORESTRAORDINARIOFESTIVO
       
    Rs.MoveNext
    Loop
    End If
       
        rs.close
    	set rs = nothing
    	
    	objconn.close
    	set objconn = nothing
    
    
    %>
    Errore:

    Tipo di errore:
    Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
    [MySQL][ODBC 3.51 Driver][mysqld-6.0.0-alpha-community-nt-debug]Subquery returns more than 1 row

  8. #8

  9. #9
    Utente di HTML.it L'avatar di wegawhite
    Registrato dal
    Aug 2004
    Messaggi
    1,400
    Originariamente inviato da optime
    passa alla 2
    Scusa ma la UNION non si utilizza per interpolare dati di tabelle diverse?

    Se no hai un esempio, un link dove poterne capire la sintassi?

  10. #10
    Originariamente inviato da wegawhite
    Scusa ma la UNION non si utilizza per interpolare dati di tabelle diverse?

    Se no hai un esempio, un link dove poterne capire la sintassi?
    a wega, che stai a di'?

    SELECT campo1 from tabella
    UNION
    SELECT campo2 from tabella

    per i link, hanno appena aperto gugol

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.