Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 18 su 18
  1. #11
    La query funziona perfettamente ma ho un problema con la view, in pratica me la crea ma alla visualizzazione mi da questo errore:
    "#1356 - references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them "

    Ho cercato in giro ma non sono risucito a trovare nulla in merito all'errore.

  2. #12
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Posta pari pari la sintassi che usi per creare la vista.

  3. #13
    Senza coalesce funziona e mi da i dati giusti, senza darmi + errore . Mi spiegheresti a grandi linee questa funzione? Non la conoscevo.

    Altro piccolo problemino sempre sulla base di questo. Devo fare quasi la stessa cosa ma in modo leggermente diverso su altri campi. Tenendo in considerazione sempre le stesse condizioni e campi devo sempre fare la somma dei rispettivi agenti tranne di un agente in particolare che per il quale devo sommarare un campo a parte.
    Rendo più chiaro le cose:

    nella tabella adempimenti ho anche i campi "costo_agente 2", "costo_agente"(che comprende tutti tranne l'agente 2).

    Adesso usando la stessa query per "costo_agente" è perfetto ma ho difficoltà ad aggiungere nella stessa vista il calcolo per il "costo_agente2".

    Grazie mille già per l'aiuto fin qui.

  4. #14
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Per quel che riguarda la funzione coalesce() bastava consultare il manuale

    http://dev.mysql.com/doc/refman/5.0/...ction_coalesce

    semplicemente restituisce il primo valore diverso da null presente nell'elenco. Quindi nella mia query, quando trova il valore null relativo al totale, anzichè mostrare a video null per l'appunto, mostra il testo selezionato.

    In effetti hai ragione. Ho provato a creare la vista e ottengo lo stesso errore, cosa che non accade senza utilizzare coalesce().

    Non sono sicuro se l'errore è attinente con questo bug

    http://bugs.mysql.com/bug.php?id=47693

    Per l'ultima domanda potresti fare un esempio numerico col risultato desiderato?

  5. #15
    ----adempimenti----
    idadempimento---agente---prezzo---prezzo_agente_2----prezzo_agenti---
    1---------------------1------------100------------10-------------------20-----
    3---------------------3------------400------------5--------------------40-----
    4---------------------1------------300------------30--------------------50-----


    ------attivita----
    idadempimento----data_inizio---
    --1----------------01/01/2010
    --3----------------01/01/2010
    --4----------------01/01/2010

    Stessa situazione di prima, l'unica differenza che invece di crearmi la tabella con l'elenco della somma del prezzo deve darmi la somma del prezzo di ogni agente, l'unica difficoltà è che l'agente 2 ha una colonna propria che deve essere sommata indipendentemente dall'id agente che è presente nella tabella adempimenti ma il risultato visualizzato insieme alle somme degli altri agenti.
    Quindi come risultato dovrebbe darmi:

    agente-----gennaio---febbraio----
    1 -----------65-------0------
    3------------40-------0------

  6. #16
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ma 65 da dove vien fuori?
    Io avrei detto 70 e nell'esempio non fai menzione di record dell'agente 2 che in fin dei conti è la discriminante che ti interessa.

    Teoricamente credo di aver capito ma dall'esempio non mi raccapezzo.

  7. #17
    ----adempimenti----
    idadempimento---agente---prezzo---prezzo_agente_2----prezzo_agenti---
    1---------------------1------------100------------10-------------------20-----
    3---------------------3------------400------------5--------------------40-----
    4---------------------1------------300------------30--------------------50-----


    ------attivita----
    idadempimento----data_inizio---
    --1----------------01/01/2010
    --3----------------01/01/2010
    --4----------------01/01/2010



    Risultato:

    agente-----gennaio---febbraio----
    1 -----------70-------0------
    2------------45-------0------
    3------------40-------0------


    Ecco, scusami con la stanchezza nn mi raccapezzavo nemmeno io

    Era 70 e l'agente 2 avrà la somma, indipendentemente, di tutta la colonna a lui dedicata mentre gli altri agenti avranno la somma solo del record a loro associato ma della colonna prezzo_agenti.

  8. #18
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ah, ok.

    La query allora diventerebbe così:

    codice:
    select agente, 
    sum(gennaio) as gennaio,
    sum(febbraio) as febbraio,
    sum(marzo) as marzo,
    sum(aprile) as aprile,
    sum(maggio) as maggio,
    sum(giugno) as giugno,
    sum(luglio) as luglio,
    sum(agosto) as agosto,
    sum(settembre) as settembre,
    sum(ottobre) as ottobre,
    sum(novembre) as novembre,
    sum(dicembre) as dicembre,
    sum(totale) as totale 
    from (
    select agente,
    sum(if(month(data_inizio)=1,prezzo_agenti,0)) as gennaio,
    sum(if(month(data_inizio)=2,prezzo_agenti,0)) as febbraio,
    sum(if(month(data_inizio)=3,prezzo_agenti,0)) as marzo,
    sum(if(month(data_inizio)=4,prezzo_agenti,0)) as aprile,
    sum(if(month(data_inizio)=5,prezzo_agenti,0)) as maggio,
    sum(if(month(data_inizio)=6,prezzo_agenti,0)) as giugno,
    sum(if(month(data_inizio)=7,prezzo_agenti,0)) as luglio,
    sum(if(month(data_inizio)=8,prezzo_agenti,0)) as agosto,
    sum(if(month(data_inizio)=9,prezzo_agenti,0)) as settembre,
    sum(if(month(data_inizio)=10,prezzo_agenti,0)) as ottobre,
    sum(if(month(data_inizio)=11,prezzo_agenti,0)) as novembre,
    sum(if(month(data_inizio)=12,prezzo_agenti,0)) as dicembre,
    sum(prezzo_agenti) as totale
    from adempimenti as ade
    left join attivita as att
    on ade.idadempimento = att.idadempimento
    where data_inizio between '2010-01-01' and '2010-12-31' and agente <> 2
    group by ade.agente
    union all
    select 2 as agente,
    sum(if(month(data_inizio)=1,prezzo_agente_2,0)), 
    sum(if(month(data_inizio)=2,prezzo_agente_2,0)), 
    sum(if(month(data_inizio)=3,prezzo_agente_2,0)), 
    sum(if(month(data_inizio)=4,prezzo_agente_2,0)), 
    sum(if(month(data_inizio)=5,prezzo_agente_2,0)), 
    sum(if(month(data_inizio)=6,prezzo_agente_2,0)), 
    sum(if(month(data_inizio)=7,prezzo_agente_2,0)), 
    sum(if(month(data_inizio)=8,prezzo_agente_2,0)), 
    sum(if(month(data_inizio)=9,prezzo_agente_2,0)), 
    sum(if(month(data_inizio)=10,prezzo_agente_2,0)), 
    sum(if(month(data_inizio)=11,prezzo_agente_2,0)), 
    sum(if(month(data_inizio)=12,prezzo_agente_2,0)), 
    sum(prezzo_agente_2) 
    from adempimenti as ade
    left join attivita as att
    on ade.idadempimento = att.idadempimento
    where data_inizio between '2010-01-01' and '2010-12-31') as t
    group by t.agente
    with rollup
    Per trasformarla in una vista ne devi creare due a causa delle limitazioni nell'uso delle subquery nella clausola from. Quindi prima si crea una vista senza la riga di riepilogo:

    codice:
    create view agenti as 
    select agente,
    sum(if(month(data_inizio)=1,prezzo_agenti,0)) as gennaio,
    sum(if(month(data_inizio)=2,prezzo_agenti,0)) as febbraio,
    sum(if(month(data_inizio)=3,prezzo_agenti,0)) as marzo,
    sum(if(month(data_inizio)=4,prezzo_agenti,0)) as aprile,
    sum(if(month(data_inizio)=5,prezzo_agenti,0)) as maggio,
    sum(if(month(data_inizio)=6,prezzo_agenti,0)) as giugno,
    sum(if(month(data_inizio)=7,prezzo_agenti,0)) as luglio,
    sum(if(month(data_inizio)=8,prezzo_agenti,0)) as agosto,
    sum(if(month(data_inizio)=9,prezzo_agenti,0)) as settembre,
    sum(if(month(data_inizio)=10,prezzo_agenti,0)) as ottobre,
    sum(if(month(data_inizio)=11,prezzo_agenti,0)) as novembre,
    sum(if(month(data_inizio)=12,prezzo_agenti,0)) as dicembre,
    sum(prezzo_agenti) as totale
    from adempimenti as ade
    left join attivita as att
    on ade.idadempimento = att.idadempimento
    where data_inizio between '2010-01-01' and '2010-12-31' and agente <> 2
    group by ade.agente
    union all
    select 2 as agente,
    sum(if(month(data_inizio)=1,prezzo_agente_2,0)),
    sum(if(month(data_inizio)=2,prezzo_agente_2,0)),
    sum(if(month(data_inizio)=3,prezzo_agente_2,0)),
    sum(if(month(data_inizio)=4,prezzo_agente_2,0)),
    sum(if(month(data_inizio)=5,prezzo_agente_2,0)),
    sum(if(month(data_inizio)=6,prezzo_agente_2,0)),
    sum(if(month(data_inizio)=7,prezzo_agente_2,0)),
    sum(if(month(data_inizio)=8,prezzo_agente_2,0)),
    sum(if(month(data_inizio)=9,prezzo_agente_2,0)),
    sum(if(month(data_inizio)=10,prezzo_agente_2,0)),
    sum(if(month(data_inizio)=11,prezzo_agente_2,0)),
    sum(if(month(data_inizio)=12,prezzo_agente_2,0)),
    sum(prezzo_agente_2)
    from adempimenti as ade
    left join attivita as att
    on ade.idadempimento = att.idadempimento
    where data_inizio between '2010-01-01' and '2010-12-31'
    e poi su di essa si crea la vista definita:

    codice:
    create view agenti_con_totale as 
    select agente, 
    sum(gennaio) as gennaio,
    sum(febbraio) as febbraio,
    sum(marzo) as marzo,
    sum(aprile) as aprile,
    sum(maggio) as maggio,
    sum(giugno) as giugno,
    sum(luglio) as luglio,
    sum(agosto) as agosto,
    sum(settembre) as settembre,
    sum(ottobre) as ottobre,
    sum(novembre) as novembre,
    sum(dicembre) as dicembre,
    sum(totale) as totale 
    from agenti
    group by agente
    with rollup
    select * from agenti_con_totale;

    Mi rimane comunque la curiosità del perchè non gli aggradi il coalesce.


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.