Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 31
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2013
    Messaggi
    177

    condizioni if then else all intern di una query

    Salve a tutti la domanda che mi pongo e questa qui.
    Ho un database con i campi
    Squadra p2013 p2014 anno1 anno2
    Napoli. 34. 45. A. B
    Real 87. 99. A. A


    Vorrei fare una condizione nella Query che se anno1 e uguale ad a è anno2 e uguale a a mi faccia la somma di tutto e me la mette nella variabile s mentre se una delle due e uguale a b mi faccia la somma solo dei punti di b e me li metta in un altra variabile sb
    So che è un po complesso ma è un operazione che si può fare con facilità ?

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    select p2013+p2014 as s, 0 as sb from tabella where anno1='A' and anno2='A'
    UNION
    select 0 as s, p2014 as sb from tabella where anno1='B' or anno2='B'

    ma non mi e' chiaro cosa tu intenda per "me li metta in una variabile"
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2013
    Messaggi
    177
    scusami ho sbagliato a parlare intendevo gli alias come hai fatto tu.
    purtroppo ho provato la tua query ma non mi restituisce cio di cui ho bisgono.
    perche se una squadra il primo anno stava in a e il secondo in b lui nn mi va a mettere i punti dell'anno in cui stava in a in S e i punti in cui stava in b in SB ma mi rimane sempre 0. come posso fare ?
    grazie per la pazienza

  4. #4
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    se anno1 e uguale ad a è anno2 e uguale a a mi faccia la somma di tutto e me la mette nella variabile s

    Questo lo fa?

    se una delle due e uguale a b mi faccia la somma solo dei punti di b e me li metta in un altra variabile sb

    Questo lo fa?

    ... non hai chiesto altro, ma puoi modificarla tu stesso per ottenere il risultato che vuoi adesso.

    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2013
    Messaggi
    177
    ho provato con altri metodi ma mi calcola sempre i valori o solo di quando si e stati in A o solo di quelli in B.
    la mia paura e che dovrei poi allungare enormemente la query per ogni possibile risultato insomma fare tipo :
    .... where anno1= "a" and anno2="a" ;
    union..... where anno1="a" and anno2="b";
    union..... where anno1="b" and anno2="b";
    union......where anno1="b" and anno2="a";

    e sinceramente verrebbe troppo pesante per questo cerco un modo per snellirla

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    Quote Originariamente inviata da gian21 Visualizza il messaggio
    Salve a tutti la domanda che mi pongo e questa qui.
    Ho un database con i campi
    Squadra p2013 p2014 anno1 anno2
    Napoli. 34. 45. A. B
    Real 87. 99. A. A


    Vorrei fare una condizione nella Query che se anno1 e uguale ad a è anno2 e uguale a a mi faccia la somma di tutto e me la mette nella variabile s mentre se una delle due e uguale a b mi faccia la somma solo dei punti di b e me li metta in un altra variabile sb
    So che è un po complesso ma è un operazione che si può fare con facilità ?


    query principale:
    codice:
    select
    tmp.squadra,
    tmp.p2013,
    tmp.p2014,
    tmp.anno1,
    tmp.anno2,
     case when (tmp.anno1='A' and tmp.anno2='A') then tmp.p2013+tmp.p2013 else 0 end s,
     case when (tmp.anno1='A' and tmp.anno2='B') then tmp.p2014
          when (tmp.anno1='B' and tmp.anno2='A') then tmp.p2013
          when (tmp.anno1='B' and tmp.anno2='B') then tmp.p2013+tmp.p2014 else 0 end sb
    from tmp


    da cui estrai solo le somme:

    query solo con valori sommati:
    codice:
    select
    sum(case when (tmp.anno1='A' and tmp.anno2='A') then tmp.p2013+tmp.p2013 else 0 end) s,
    sum(case when (tmp.anno1='A' and tmp.anno2='B') then tmp.p2014
          when (tmp.anno1='B' and tmp.anno2='A') then tmp.p2013
          when (tmp.anno1='B' and tmp.anno2='B') then tmp.p2013+tmp.p2014 else 0 end) sb
    from tmp
    ciao


    ps.: la mia tabella si chiama TMP.......testato con firebird.
    Ultima modifica di 123delphi321; 02-06-2014 a 14:21

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    ...ho sbagliato a scrivere una somma in entrambe le query:

    ...when (tmp.anno1='A' and tmp.anno2='A') then tmp.p2013+tmp.p2013 else...

    sommo tmp.p2013+tmp.p2013, invece devi sostituire con tmp.p2013+tmp.p2014


    ciao

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    ...ho sbagliato a scrivere una somma in entrambe le query:

    ...when (tmp.anno1='A' and tmp.anno2='A') then tmp.p2013+tmp.p2013 else...

    sommo tmp.p2013+tmp.p2013, invece devi sostituire con tmp.p2013+tmp.p2014

    codice:
    select
    tmp.squadra,
    tmp.p2013,
    tmp.p2014,
    tmp.anno1,
    tmp.anno2,
     case when (tmp.anno1='A' and tmp.anno2='A') then tmp.p2013+tmp.p2014 else 0 end s,
     case when (tmp.anno1='A' and tmp.anno2='B') then tmp.p2014
          when (tmp.anno1='B' and tmp.anno2='A') then tmp.p2013
          when (tmp.anno1='B' and tmp.anno2='B') then tmp.p2013+tmp.p2014 else 0 end sb
    from tmp
    
    
    
    select
    sum(case when (tmp.anno1='A' and tmp.anno2='A') then tmp.p2013+tmp.p2014 else 0 end) s,
    sum(case when (tmp.anno1='A' and tmp.anno2='B') then tmp.p2014
             when (tmp.anno1='B' and tmp.anno2='A') then tmp.p2013
             when (tmp.anno1='B' and tmp.anno2='B') then tmp.p2013+tmp.p2014 else 0 end) sb
    from tmp

    ciao

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2013
    Messaggi
    177
    ciao ti volevo ringraziare per la stupenda risposta che mi hai dato pero a me mi esce questo errore :
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource


    questo e il mio codice :
    codice:
    "select *,
     case when (anno1='A' and anno2='A') then p2013+p2014 else 0 end s,
     case when (anno1='A' and anno2='B') then p2014
          when (anno1='B' and anno2='A') then p2013
          when (anno1='B' and anno2='B') then p2013+p2014 else 0 end sb
    from squadre JOIN serie ON squadreid = squadre.id
    select 
    sum(case when (anno1='A' and anno2='A') then p2013+p2014 else 0 end) s,
    sum(case when (anno1='A' and anno2='B') then p2014
             when (anno1='B' and anno2='A') then p2013
             when (anno1='B' and anno2='B') then p2013+p2014 else 0 end) sb
    from squadre JOIN serie ON squadreid = squadre.id");
    e un po diverso dal tuo solo perche io devo fare un join per andare a prendere tutti i campi

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    non mi è chiaro a cosa ti serve quella join!

    posta la query completa inquanto in questo caso join non serve a nulla.

    e poi ti consiglio vivamente di indicare il nome della tabella prima di ogni nomefields....cosi come avevo fatto nel codice da me postato.

    select
    <tabellanome>.<fieldnome>
    from <tabellanome>
    Ultima modifica di 123delphi321; 03-06-2014 a 12:12

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.