Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    395

    query con risultato univoco

    Ciao a tutti,

    con il codice sottostante controllo che in caso di 2 gare sullo stesso codicecampo non scarti il risultato (puntiCO) migliore. Il problema si presenta nel caso in cui sullo stesso codicecampo i puntiCO siano identici.
    Per esempio se sullo stesso campo un giocatore ha acquistato prima 50 punti e poi 100 punti il codice non scarta i 100 punti ma i 50. ma se nel caso sullo stesso campo un giocatore conquista 100 punti in tutte e due le gare attualmente non lo scarta.

    codice:
    if contgare("contacampo") => 2 then
    
    SQL = "SELECT punteggi.codiceGiocatore, Max(punteggi.PuntiCO) AS MaxDiPuntiCO, Gare.CodiceCampo "
    SQL = SQL & "FROM ["&percorsoserver&"].Gare INNER JOIN punteggi ON Gare.CodiceGara = punteggi.CodiceGara "
    SQL = SQL & "WHERE punteggi.codicegiocatore = '"&contGare("codicegiocatore") &"' "
    SQL = SQL & "AND gare.codicecampo = "& contGare("codicecampo") &" "
    'SQL = SQL & "AND punteggi.PuntiCO <> 0 "
    SQL = SQL & "GROUP BY punteggi.codiceGiocatore, Gare.CodiceCampo "
    SQL = SQL & "ORDER BY punteggi.codicegiocatore ASC "
    
     Set tGare = Server.CreateObject("ADODB.Recordset")
     tGare.open SQL,FigspConn,3,1
     
    MaxDiPuntiCO = tGare("MaxDiPuntiCo")
    MaxDiPuntiCO = replace(MaxDiPuntiCO,",",".")
    
           sSql = ""
           sSql = sSql & "update Punteggi INNER JOIN ["&percorsoserver&"].Gare ON punteggi.CodiceGara = Gare.CodiceGara "
           sSQL = sSQL & "set ScartoPunti = 'N' "
           sSql = sSql & "where CodiceGiocatore= '" & tGare("CodiceGiocatore") & "' "
           sSql = sSql & "AND punteggi.puntiCO = "&MaxDiPuntiCO&" "
           sSql = sSql & "AND gare.codicecampo = "&tGare("codicecampo")&" "
           set rs=FigspConn.execute (sSql) 
    
           sSql = ""
           sSql = sSql & "update Punteggi INNER JOIN ["&percorsoserver&"].Gare ON punteggi.CodiceGara = Gare.CodiceGara "
           sSQL = sSQL & "set ScartoPunti = 'S' "
           sSql = sSql & "where CodiceGiocatore= '" & tGare("CodiceGiocatore") & "' "
           sSql = sSql & "AND puntiCO <> "&MaxDiPuntiCo&" "
           sSql = sSql & "AND gare.codicecampo = "&tGare("codicecampo")&" "
           set rs=FigspConn.execute (sSql) 
    end if
    Grazie

  2. #2
    spiegazione molto controrta -- ma forse ho capito che MAX()...GROUP BY ti riporta n righe quando ci sono n risultati (MAX()) uguali. Hai provato ad aggiungere TOP 1?

    Comunque il problema è funzionale, e puoi rispondere solo tu: quali dei due MAX() uguali prendere? Cioè, se Gianni e Pino hanno tutti e due 100 pt, chi è il primo?

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    395
    innanzitutto grazie della risposta.
    Immaginavo che la spiegazione non fosse il top....
    Il fatto è che lo stesso giocatore ha 100 punti e non diversi giocatori.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    395
    ho inserito anche top 1 ma non cambia nulla....

  5. #5
    scusa, ma a che ti serve la GROUP BY giocatore, campo se fai una WHERE per giocatore e campo?

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    395
    procediamo con calma....
    per ogni singolo giocatore verifico se ha fatto 2 gare sullo stesso campo.
    se le ha fatte tengo valida solo la migliore gara e quindi il valore MAX.
    ma se sullo stesso campo il valore MAX è uguale devo comunque tenerne uno e non tutti e due.

    anche se so che non è la stessa cosa stavo provando le sql su access. il funzionamento pare semplice. la prima estraggo tutti i punteggi. poi faccio una query sulla prima query dove estraggo solo i valori massimi per ogni singolo campo.
    Ma su asp non posso fare di certo così. pensavo di unire le due selelct ma non ci riesco
    Ultima modifica di ottoboni77; 23-09-2016 a 17:36

  7. #7
    boh, a me pare un giro dell'oca. non basta fare


    SQL ="SELECT TOP 1 punteggi.codiceGiocatore, punteggi.PuntiCO, Gare.CodiceCampo "
    SQL
    = SQL &"FROM ["&percorsoserver&"].Gare INNER JOIN punteggi ON Gare.CodiceGara = punteggi.CodiceGara "
    SQL
    = SQL &"WHERE punteggi.codicegiocatore = '"&contGare("codicegiocatore")&"' "
    SQL
    = SQL &"AND gare.codicecampo = "& contGare("codicecampo")&" "
    SQL = SQL & "ORDER BY punteggi.PuntiCO DESC "



    ????

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    395
    direi proprio di no. così facendo estraggo solo il record maggiore. ma non diviso per i campi.
    con la prima sql proposta estraggo i valori maggiori per ogni campo. ma se due campi hanno puntiCO uguali li estrae entrambi invece che uno solo.

  9. #9
    mi spiace, non capisco, non so cosa voglia dire "record diviso per i campi". magari se fai un esempio il mio unico neurone sopravvissuto capisce

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    395
    provo a spiegare con degli esempi:
    la tabella è composta schematicamente così:

    codicegiocatore | codicecampo | puntiCo
    I1710PP | 36 | 75
    I1710PP | 36 | 40
    I1710PP | 72 | 100
    I1710PP | 72 | 100

    nella tabella ci sono tanti altri giocatori. Il primo codice postato verifica se un giocatore ha fatto più gare sullo stesso campo:

    if contgare("contacampo") => 2 then

    a quel punto la sql successiva verifica i puntiCO maggiori e scarta il resto. quindi la tabella si popola così:

    codicegiocatore | codicecampo | puntiCo | scarto
    I1710PP | 36 | 75 | N
    I1710PP | 36 | 40 | S
    I1710PP | 72 | 100 | N
    I1710PP | 72 | 100 | N

    come puoi notare sul campo 72 non scarta nessun valore perché i puntiCO sono uguali. La tabella dovrebbe invece venire così:

    codicegiocatore | codicecampo | puntiCo | scarto
    I1710PP | 36 | 75 | N
    I1710PP | 36 | 40 | S
    I1710PP | 72 | 100 | S
    I1710PP | 72 | 100 | N

    Grazie

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.