Newsgroup: it.comp.appl.access
Titolo: Query di "raggruppamento"...

Ho un piccolo problema con una query di raggruppamento tramite codice
SQL. O meglio... Come posso, sempre "tramite codice SQL", effettuare
un raggruppamento in modo tale che da una serie di record del tipo:
CodA    Descrizione     CodB    Descrizone      Num
1111    Pippo           2222    Pluto           1741
2222    Pluto           1111    Pippo           1741
3333    Cane            4444    Gatto           561
4444    Gatto           3333    Cane            561
5555    Rosso           6666    Verde           561
6666    Verde           5555    Rosso           561
ottenga come risultato... una serie di record, del tipo:
CodA    Descrizione     CodB    Descrizone      Num
1111    Pippo           2222    Pluto           1741
3333    Cane            4444    Gatto           561
5555    Rosso           6666    Verde           561
oppure (indifferente!):
CodA    Descrizione     CodB    Descrizone      Num
2222    Pluto           1111    Pippo           1741
4444    Gatto           3333    Cane            561
6666    Verde           5555    Rosso           561
Grazie, come sempre, del suggerimento.
Saluti e buona giornata...
Marco

 ha scritto nel messaggio 
news:a47181a2.04120...@posting.google.com...

Scusa la mia mancanza di comprensione: non riesco a vedere il raggruppamento 
ma solo gli stessi dati e gli stessi nomi di campo.
In pratica prendi sempre gli stessi dati ma solo alcuni rispetto alla prima 
lista: dov'č il raggruppamento?
Ciao, Carlo 

Scusa il ritardo con cui rispondo, ma ero impegnato a filosofeggiare sui
polinomi e le classi .....
Il tuo è un problema serio.
In pratica tu voresti selezionare solo i record in cui CodA e CodB non si
ripetono, indipendentemente dall'ordine.
Ha ragione Carlo dicendoti che questo NON è un problema di raggruppamento.
Io aggiungo questo non è un problema
SET ORIENTED. Cerco di spiegarmi meglio: Con una query SQL di tipo SELECT
puoi effettuare
delle operazioni di selezione (e di proiezione) solo considerando le tabelle
come INSIEMI di record.
Con una query SELECT selezioni i record che soddisfano determinati requisiti
esplicitati nella clausola WHERE.
Il tipo di selezione che hai proposto non è SET ORIENTED ma ROW ORIENTED. In
pratica vuoi selezionare tutti i record
della tabella i cui valori di CodA non sono tra i valori di CodB dei record
già selezionati (o viceversa)!
Dunque, una volta selezionato il primo record (CodA=1111, CodB=2222), il
criterio di selezione specifica che il secondo record
deve avere il CodA diverso dal CodB del primo record! Più in generale,
ripeto, il codice CodA dell'n-esimo record non deve essere uguale
ad alcuno dei CodB dei record già selezionati. SQL non fornisce alcuno
strumento di indagine sui record già selezionati.
Questo è un esempio di selezione ROW Oriented.
Quando ti trovi in queste circostanze ci sono tre strade:
1)  Rivedi il progetto del database perchè c'è qualcosa di strano (scelta
caldamente consigliata)
2) Usi un linguaggio procedurale insieme a SQL (VBA con ADO o DAO), ma è una
botta nei perpendicoli;
3) Usi un metodo per simulare una query Row Oriented con una Set Oriented:
numera in modo ordinato le righe (dunque inserisci un campo contatore
crescente nella tabella) e lancia la seguente query parametrica:
SELECT T3.Coda, T3.DescrizioneA, T3.CodB, T3.DescrizioneB, T3.Num FROM
Tabella3 T3 WHERE CodA NOT IN (select CodB FROM  Tabella3 where Counter <
T3.counter)
Dove con 'Tabella3' si intende la seguente (la tua + il campo contatore):
   CodA DescrizioneA CodB DescrizioneB Num Counter
      1111 Pippo 2222 Pluto 1741 1
      2222 Pluto 1111 Pippo 1741 2
      3333 Cane 4444 Gatto 561 3
      4444 Gatto 3333 Cane 561 4
      5555 Rosso 6666 verde 561 5
      6666 verde 5555 rosso 561 6
Il sisultato è:
   Coda DescrizioneA CodB DescrizioneB Num
      1111 Pippo 2222 Pluto 1741
      3333 Cane 4444 Gatto 561
      5555 Rosso 6666 verde 561
Spero esserti stato utile.
Ciao e fammi sapere.
--
Simplex2
www.mdenittis.it