Newsgroup: it.comp.appl.access
Titolo: Una query molto particolare...

Mi e' stato chiesto di fare una query molto particolare e non so'
neppure da dove iniziare, sto persino pensando che non sia possibile da
realizzare con un DB relazionale.
Per farvi capire come dovrebbe essere, usero' un esempio un po'
strampalato ma che rende bene l'idea.
Immaginate di avere un DB con 2 tabelle: la prima  si chiama "PERSONA"
e contiene varie informazioni personali, la seconda si chiama "VESTITI"
e contiene una lista dei vestiti indossati dalle persone presenti in
"PERSONA" ed il loro colore. Fra "PERSONA" e "VESTITI" c'e' una
relazione 1 -> molti.
Un esempio di dati contenuti nel DB potrebbe essere:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mario
 |
 |-> pantaloni, blu
 +-> maglietta, verde
Giovanni
 |
 |-> pantaloni, neri
 |-> camicia, azzurro
 +-> maglione, grigio
Marco
 |
 |-> pantaloni, grigio
 |-> camicia, bianco
 +-> maglione, nero
Luca
 |
 +-> costume da bagno, blu
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Adesso, ammesso che le combinazioni di vestiti siano un numero limitato
(diciamo 4) e gia' conosciute, dovrei  creare una query che sia
innanzitutto in grado di trovare le persone che indossano un ipotetica
combinazione X (es.: pantaloni/camicia/maglione) e fra questi trovare
la percentuale di persone per ogni combinazione di colore.
Un esempio di risultato desiderato potrebbe essere:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
% Combinazioni cromatiche fra chi indossa pantaloni/camicia/ maglione:
 30%  pantaloni neri   | camicia azzurra | maglione grigio
 50%  pantalonni grigi | camicia bianca  | maglione nero
 30%  pantaloni grigi  | camicia rosa    | maglione grigio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Qualcuno ha qualche idea di come si possa fare? (se e' possibile)
grazie e ciao
merlinO
Sent via Deja.com
http://www.deja.com/

 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Qui il problema e' un altro, la tua query, cosi' come l'hai descritta, non
potrebbe essere analizzata da nessuno, dato che gia' con pochi elementi
dovresti generare un numero di combinazioni tale da risultare non leggibile.
Forse entrando nel merito (non per farsi i fatti tuoi) si puo' trovare una
strqada soddisfaciente.
Sib
--
------------------------------------------------------
il sito comune di it.comp.database.access:
http://members.xoom.it/it_db_access
------------------------------------------------------
La mia home (ancora non completa)
http://digilander.iol.it/syb
------------------------------------------------------
4000 anni fa', il saggio egizio Ptahhotep scrisse:
"... perche' non esistono saggi per nascita."
------------------------------------------------------
Saturiamo ECHELON:
bomba saddam attentato medio oriente


Spero di aver capito correttamente il tuo problema.
Ipotizzando che:
- la tabella Persona sia composta dai campi ID (contatore o numerico) e
Nome;
- la tabella Vestiti sia composta dai campi ID (in relazione con la tabella
Persona), Vestito e Colore;
potresti ottenere il risultato voluto utilizzando 3 query:
1. la prima (Totale) ti consente di ottenere il conteggio di tutte le
combinazioni presenti, e l'SQL è il seguente:
SELECT Count(Vestiti.ID) AS TotaleCombinazioni
FROM Persona INNER JOIN Vestiti ON Persona.ID = Vestiti.ID;
2. la seconda query (TotaleCombinazioni)  serve a calcolare il conteggio
delle singole combinazioni;
SELECT Count(Persona.Nome) AS ConteggioCombinazioni, Vestiti.Vestito,
Vestiti.Colore
FROM Persona INNER JOIN Vestiti ON Persona.ID = Vestiti.ID
GROUP BY Vestiti.Vestito, Vestiti.Colore;
3. con l'ultima query (che è poi quella da lanciare per visualizzare i
risultati) ottieni la percentuale, dividendo il campo ConteggioCombinazioni
della seconda query per il campo TotaleCombinazioni della prima
SELECT TotaleCombinazioni.Vestito, TotaleCombinazioni.Colore,
TotaleCombinazioni.ConteggioCombinazioni,
Format([ConteggioCombinazioni]/[TotaleCombinazioni],"Percent") AS
Percentuale
FROM Totale, TotaleCombinazioni;
Per ottenere poi la percentuale solo relativamente a determinate
combinazioni, occorre creare i filtri voluti nella query TotaleCombinazioni.
Maggiori informazioni riguardo a questo metodo di calcolo le puoi trovare
nella Knowledge Base della Microsoft, in particolar modo all'articolo
Q132142.
Ciao,
Alberto Covili

 Sib
ciao e grazie


 perche' il database reale e' molto piu' complesso... :o(
Ne sono certo, prova a dare un'occhiata alla risposta di Alberto, forse lui
ha capito qualcosa che a me sfugge.
Ciao, Sib


 Ciao, Sib
