Newsgroup: it.comp.appl.access
Titolo: Query con campo numerico da non ripetere

Ciao
ho la TABELLA1 con i campi Articolo e QTA
         TABELLA2 con i campi Articolo e N_Ordine
Faccio una query che mi riporta i record della tabella1 e tutti quelli della 
tabella2
legati dal campo Articolo, il problema è che mi ripete la QTA tante volte 
quante il record della tabella1 match con quello della tabella2
Esiste qualche istruzione per dire lasciami valorizzato il campo qta del 
solo  primo record (il primo match) ?
esempio
Tabella1                         Tabella2
Articolo  qta                    Articolo     N_Ordine
codice1   100                    codice1     A05001
codice2    20                    codice1     A05011
                                        codice1     A05040
                                        codice2     A05010
                                        codice2     A05999
Risultato
Articolo     Qta   N_Ordine
codice 1     100   A05001
codice 1     100   A05011
codice 1     100   A05040
codice 1      20   A05010
codice 1      20   A05999
Obbiettivo
Articolo     Qta   N_Ordine
codice 1     100   A05001
codice 1         0  A05011
codice 1         0  A05040
codice 1      20   A05010
codice 1        0   A05999

 ha scritto nel messaggio
news:euBve.23159$yM4.3...@twister2.libero.it...

Se la struttura di Tabella1 è la seguente:
Articolo            Testo e chiave primaria
qta                    Numerico
Se la struttura di Tabella2 è la seguente
IDTabella2        Contatore e chiave primaria
Articolo             Testo
N_Ordine          Testo
Se le due tabelle sono in relazione uno-a-molti in base ai rispettivi campi
Articolo.
Inserisci in un modulo del tuo database la seguente funzione:
Function PrevRecVal(QueryName As String, KeyName As String, KeyValue,
FieldNameToGet As String)
    '*************************************************************
    ' FUNCTION: PrevRecVal()
    ' PURPOSE: Retrieve a value from a field in the previous query
    '          record.
    ' PARAMETERS:
    '    QueryName - The name of the query
    '    KeyName  - The name of the query's unique key field.
    '    KeyValue - The current record's key value.
    '    FieldNameToGet - The name of the field in the previous
    '                     record from which to retrieve the value.
    ' RETURNS: The value in the field FieldNameToGet from the
    '          previous form record.
    ' EXAMPLE:
    '    =PrevRecVal("NomeQuery","ID",[ID],"OdometerReading")
    '**************************************************************
   Dim RS As DAO.Recordset
   Dim db As DAO.Database
   On Error GoTo Err_PrevRecVal
   ' The default value is zero.
   PrevRecVal = 0
   Set db = CurrentDb()
   ' Get the form recordset.
   Set RS = db.OpenRecordset(QueryName, dbOpenDynaset)
   ' Find the current record.
   Select Case RS.Fields(KeyName).Type
      ' Find using numeric data type key value?
      Case DB_INTEGER, DB_LONG, DB_CURRENCY, DB_SINGLE, _
           DB_DOUBLE, DB_BYTE
         RS.FindFirst "[" & KeyName & "] = " & KeyValue
      ' Find using date data type key value?
      Case DB_DATE
         RS.FindFirst "[" & KeyName & "] = #" _
         & Format(KeyValue, "mm/dd/yyyy") & "#"
      ' Find using text data type key value?
      Case DB_TEXT
         RS.FindFirst "[" & KeyName & "] = '" & KeyValue & "'"
      Case Else
         MsgBox "ERROR: Invalid key field data type!"
         Exit Function
   End Select
   ' Move to the previous record.
   RS.MovePrevious
   ' Return the result.
   PrevRecVal = RS(FieldNameToGet)
   RS.Close
Bye_PrevRecVal:
    Exit Function
Err_PrevRecVal:
    Resume Bye_PrevRecVal
End Function
Con questa funzione è possibile conosce il valore del campo Articolo del
record precedente: se differente da quello del record corrente inserisci nel
campo qta il valore del campo qta di Tabella1, in caso contrario inserisci
il valore 0 (zero).
A tale scopo creati una query chiamata Query1 e che abbia il seguente codice
SQL:
SELECT Tabella2.IDTabella2, Tabella2.Articolo,
IIf(PrevRecVal("Query1","IDTabella2",[IDTabella2],"Articolo")=[Tabella2].[Ar
ticolo],0,[Tabella1].[qta]) AS qta, Tabella2.N_Ordine
FROM Tabella1 INNER JOIN Tabella2 ON Tabella1.Articolo = Tabella2.Articolo;
Naturalmente se la query creata non si chiama Query1 devi modificare di
conseguenza il suo codice SQL relativamente al richiamo della funzione
PrevRecVal.
La funzione PrevRecVal fa riferimento alla libreria Microsoft DAO quindi, se
usi una versione di Access successiva ad Access 97, aggiungi al database i
riferimenti a tale libreria.
-- 
Roberto
-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------