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

    Somma di singoli record

    Salve, spero che il titolo abbia coerenza con il problema che ho con una query dove devo sommare dei singoli record in base al mese.

    Allora avendo in una tabella CF - mese - Gruppo - SKILL - Punti - Premio

    devo aggiornare il campo Premio in base ad un calcolo che prende i punti e altri campi in altre tabelle(Lordo,Coefficente, etcc..)

    Il problema sta qui:

    nella tabella che ho descritto in maniera superficiale ho questi record

    sanfra1976 092008 - GRP0001 - 2 - 40 - NULL
    sanfra1976 092008 - GRP0002 - 2 - 0 - NULL
    sanfra1976 102008 - GRP0003 - 2 - 55 - NULL
    sanfra1976 112008 - GRP0004 - 2 - 55 - NULL

    adesso io dovrei prendere il valore 40 e fare il calcolo per quel operatore per quel mese.
    e così via tutti gli altri

    Spero di essere stato chiaro

    Grazie ancora per il Vostro aiuto

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    162
    Allora ti mostro la query che sono riusciuto a fare e che mi d però un errore nel momento in cui inserisco la clausola Update:

    codice:
    Update sk_generale set Premio=
    (
    select distinct ((anask.coefficente * (SUM(gen.Punti))/100)) * (Lordi_op.lordo *(ana_op.perc_part_time)/13)
    from sk_generale gen
                    join sk_generale gen1
    		on gen.OP = gen1.OP
    			--and gen.Punti = gen1.Punti
    			    join ANA_SKILL anask
                 			on gen.SKILL=anask.ID 
    					and gen1.SKILL = anask.ID
                 				 	join ANA_OP ana_op 
                  					on ana_op.CodiceFiscale = gen.OP
                       				     and ana_op.CodiceFiscale = gen1.OP
    		     					join Lordi_OP  
                     					on Lordi_OP.Livello = ana_op.Livello
    
    group by gen.Mese,gen.ID_GRUPPO,gen1.ID_GRUPPO,anask.COEFFICENTE,Lordi_OP.LORDO,ana_op.PERC_PART_TIME,gen1.Mese
    
    HAVING gen.ID_GRUPPO <> gen1.ID_GRUPPO and gen.Mese <> gen1.Mese)
    
    from sk_generale gen2
    
    where gen2.Premio is null
    Nel senso che con il solo select mi dà i valori come li voglio
    cioè per mese mi deve dare il risultato della formula
    mentre se gli inserisco l'update mi dice che ci sono troppi valori di ritorno nella subquery


    Non so se può bastare.
    Spero di si, sono veramente disperato
    Grazie

  4. #4

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    162
    sql server 2000
    scusa se non te l'ho fatto presente prima

    sto uscendo pazzo, ma dove sta il problema in qualche join


    Grazie

  6. #6
    la UPDATE fatta così prevede che la subquery riporti UN SOLO valore, non un recordset.

    devi usare una forma diversa, tipo

    codice:
    Update sk_generale set Premio=
    
    ((anask.coefficente * (SUM(gen.Punti))/100)) * (Lordi_op.lordo *(ana_op.perc_part_time)/13)
    from sk_generale gen
                    join sk_generale gen1
    		on gen.OP = gen1.OP
    			--and gen.Punti = gen1.Punti
    			    join ANA_SKILL anask
                 			on gen.SKILL=anask.ID 
    					and gen1.SKILL = anask.ID
                 				 	join ANA_OP ana_op 
                  					on ana_op.CodiceFiscale = gen.OP
                       				     and ana_op.CodiceFiscale = gen1.OP
    		     					join Lordi_OP  
                     					on Lordi_OP.Livello = ana_op.Livello
    
    group by gen.Mese,gen.ID_GRUPPO,gen1.ID_GRUPPO,anask.COEFFICENTE,Lordi_OP.LORDO,ana_op.PERC_PART_TIME,gen1.Mese
    
    HAVING gen.ID_GRUPPO <> gen1.ID_GRUPPO and gen.Mese <> gen1.Mese

    ho buttato lì semplificando, sistemala tu

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    162
    L'avevo provata anche questa formula ma dà il seguente errore:

    An aggregate may not appear in the set list of an UPDATE statement.

    Che io avevo pensato di aver risolto in quel modo mettendo tra parentesi tonde tutta la select

  8. #8
    avrai sicuramente un campo che lega la tabella sk_generale alla sub-select. estrai la subselect in una temp, aggiungendo anche il campo legame. poi fai una update in join tra la temp e sk_generale

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    162
    quindi mi consigli la stessa cosa che stavo provando già da un oretta quella della tabella temporanea in modo che mi ritorni un singolo valore alla volta e fare l'update?

  10. #10
    non uno alla volta. li fai tutti assieme

    codice:
    select legame, valore into #temp from tabella_xyz where id...
    
    update tabella_abc set miovalore=valore from tabella_abc join #temp on tabella_abc.id=#temp.legame
    qualcosa del genere

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