Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [sql] Update record diversi con Distinct

    id ref cartella
    a1 1 0
    a1 2 0
    ad 1 0
    b1 1 0
    a1 3 0

    ciao a tutti ho una tabella come sopra. Il mio problema è che vorrei fare un UPDATE di 'cartella' con valori incrementanti, e raggruppati per 'id' diversi.
    Come posso fare?
    Grazie.

  2. #2
    Non penso sia possibile in sql fare un update incrementale, devi eseguire 5 istruzione di update, una per ogni riga. Dopodichè farai una select distinct e ragruppi per id.

  3. #3
    ho provato a fare la seguente query all'interno del mio db Access, ma mi dà errore.
    codice:
    x=select count(*) from miatabella
    i=1
    begin
    while x>0
    UPDATE miatabella SET miatabella.NCARTELLA = "x";
    x=x-1
    i=i+1
    end
    come posso sistemarla?

  4. #4
    sintomo generico: "mi dà errore" -> risposta generica: "perché è sbagliata"



    cerchiamo di essere più precisi, almeno dicci che errore ti dà (e poi, scusa, quella sarebbe una query o è VBA? )

  5. #5
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    A me sembra una "razza diversa" di VBA

    poi non capisco neanche il risultato che vuole ottenere:

    postaci quei 5 record sopra come li vorresti "trasformati"
    dopo avere eseguito il tuo ciclo
    Ultima modifica di nman; 22-10-2013 a 18:06

  6. #6
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Scusate ho postato doppio

  7. #7
    partendo da questi

    id ref cartella
    a1 1 0
    a1 2 0
    ad 1 0
    b1 1 0
    a1 3 0
    vorrei ottenere questo
    id ref cartella
    a1 1 1
    a1 2 1
    ad 1 2
    b1 1 3
    a1 3 1

    però all'interno di un istruzione sql da passare al generatore di query.
    è fattibile?

  8. #8

  9. #9
    e con Oracle mandando un'istruzione sql (capendo però come impostarla) da console?

  10. #10
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da 19pantarei75 Visualizza il messaggio
    .... però all'interno di un istruzione sql da passare al generatore di query. ...
    Ci confondi le idee,
    di solito al generatore di query non si passa una istruzione sql,
    bensi è il generatore di query che crea le istruzioni sql

    comunque usando il VBA di Access puoi fare:
    - 1 recorset sulla tua tabella ( Chiamata "Tabe" ) ( id-testo / ref-numero / cartella-numero )
    - 1 query che raggruppando per "id" gli da una numerazione come da esempio ( nel codice "ssq" )
    - 1 recordset su ssq
    - cicli sul recordset della tabella "RsT"
    - per ogni ciclo
    ---- cicli sl recorset della qery RsQ
    ---- se id corrisponde aggiorni il valore della cartella
    - chiudi tutto
    codice:
    Public Function AggiornaValori()
    
    Dim ssq As String  ' La query che Raggruppa x id e conta quelli minori
    ssq = ""
    ssq = ssq & "SELECT DISTINCT Q2.id, Q2.conx FROM "
    ssq = ssq & "(SELECT Tabe.id, (SELECT Count(T.id) FROM "
    ssq = ssq & "(SELECT DISTINCT X.id FROM Tabe AS X) AS T "
    ssq = ssq & "WHERE "
    ssq = ssq & "T.id<=Tabe.id) AS conx FROM Tabe) AS Q2;"
    
    Dim DBx As DAO.Database
    Dim RsT As DAO.Recordset  ' La Tabella da aggiornare
    Dim RsQ As DAO.Recordset  ' La Query da cui prelevare i valori da mettere in tabella
    
    Set DBx = CurrentDb
    Set RsT = DBx.OpenRecordset("Tabe", dbOpenDynaset)
    Set RsQ = DBx.OpenRecordset(ssq, dbOpenDynaset)
    
    ' -- 1 --- Ciclo sui record della Tabella -------------------------------------------
    RsT.MoveFirst
    Do Until RsT.EOF
        
        ' -- 2 --- Per ogni record della tabelle ciclo sui record della query
        ' trovo il corrispondente id e aggiorno il valore di Tabe.cartella
        RsQ.MoveFirst
        Do Until RsQ.EOF
        
            If RsT.Fields("id") = RsQ.Fields("id") Then
                RsT.Edit
                RsT.Fields("cartella") = RsQ.Fields("conx")
                RsT.Update
            Else
                '
            End If
            RsQ.MoveNext
        Loop
        ' -- 2 --- Fine ---------------------------
        
        RsT.MoveNext
    Loop
    ' -- 1 --- Fine -------------------------------------------
    
    RsQ.Close
    RsT.Close
    DBx.Close
    Set RsQ = Nothing
    Set RsT = Nothing
    Set DBx = Nothing
    
    End Function
    Attento se potresti avere dei valori vuoti di "id" allora bisogna aggiustarla
    Facci sapere

    .

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.