2012-11-23 10 views
5

sto lavorando in MS Access 2003.SQL 2 tavoli, ottenere conta sul primo, gruppo dalla seconda

devo tabella con i record di questo tipo di struttura:

ID, Origin, Destination, Attr1, Attr2, Attr3, ... AttrX 

for example: 

1, 1000, 1100,  20, M,  5 ... 
2, 1000, 1105,  30, F,  5 ... 
3, 1001, 1000,  15, M,  10 ... 
... 

devo anche la tabella che ha partenza e arrivo, Codici raggruppati

Code, Country, Continent 
1000, Albania, Europe 
1001, Belgium, Europe 
... 
1100, China, Asia 
1105, Japan, Asia 
... 

che cosa ho bisogno è quello di ottenere 2 tavoli che contano record in base ai criteri relativi agli attributi che specificano ma raggruppate per:
012.351.1. Origine continente e continente Destinazione
2. Origine Continente e Paese di destinazione

ad esempio:

Caso 1.

Origin, Destination, Total, Females, Males, Older than 20, Younger than 20, ... 
Europe, China,  300, 100,  200, 120,   180 ... 
Europe, Japan,  150, 100,  50, ... 
... 

Caso 2.

Origin, Destination, Total, Females, Males, Older than 20, Younger than 20, ... 
Europe, Asia,  1500, 700,  800 ... 
Asia, Europe,  1200, ... 
... 

Può essere fatto nel modo in cui potrei aggiungere più colonne/crit l'eria abbastanza facilmente?

+0

In una situazione simile, ho utilizzato un modulo che consentiva all'utente di selezionare i criteri e creare le query in VBA. Non sono sicuro che otterrete una soddisfacente soluzione SQL-only. – Fionnuala

risposta

1

Caso 1:

select count(1) as total ,t2.continent,t3.country,t1.attr1,t1.attr2,t1.attr3 ... t1.attrX from table1 t1 
join table2 t2 on t1.origin = t2.code 
join table3 t3 on t1.destination = t3.code 
group by t2.continent,t3.country,t1.attr1,t1.attr2,t1.attr3 ... t1.attrX 
order by total desc 

Caso 2:

select count(1) as total ,t2.continent,t3.continent,t1.attr1,t1.attr2,t1.attr3 ... t1.attrX from table1 t1 
join table2 t2 on t1.origin = t2.code 
join table3 t3 on t1.destination = t3.code 
group by t2.continent,t3.continent,t1.attr1,t1.attr2,t1.attr3 ... t1.attrX 
order by total desc 
+0

Si prega di notare che i tag includono MS Access, SQL è un tag generico, quindi questa particolare risposta richiede MS Access SQL. Quanto sopra non funzionerà. – Fionnuala

+0

Non vedo come posso applicare i criteri sugli attributi per ottenere conteggi specifici utilizzando questa risposta. anche l'accesso genera l'errore di sintassi nella clausola FROM. – user1155872

+0

dovresti aggiungere i tuoi attributi in select e group by anche, ovviamente genererà un errore, ci sono ...- s nella dichiarazione – ogres

0

È possibile unire le query con le query, quindi questo è un campo incrociato per Maschio/Femmina (attr2)

TRANSFORM Count(Data.ID) AS CountOfID 
SELECT Data.Origin, Data.Destination, Count(Data.ID) AS Total 
FROM Data 
GROUP BY Data.Origin, Data.Destination 
PIVOT Data.Attr2; 

Questa è l'età:

TRANSFORM Count(Data.ID) AS CountOfID 
SELECT Data.Origin, Data.Destination, Count(Data.ID) AS Total 
FROM Data 
GROUP BY Data.Origin, Data.Destination 
PIVOT Partition([Attr1],10,100,10); 

Questa combina i due:

SELECT Ages.Origin, Ages.Destination, Ages.Total, 
     MF.F, MF.M, Ages.[10: 19], Ages.[20: 29], Ages.[30: 39] 
FROM Ages, MF; 

Come si può vedere, questo potrebbe essere più facile da gestire in VBA.

Problemi correlati