2012-11-23 2 views
5

Je travaille dans MS Access 2003.SQL 2 tables, obtenir compte sur le premier groupe par seconde

J'ai le tableau avec des documents de ce genre de structure:

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 ... 
... 

J'ai aussi la table qui a Origine et destination des codes groupés

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

Ce que je dois est d'obtenir 2 tables qui compteraient des dossiers en fonction de critères liés aux attributs I assignent, mais regroupés par:
1. Origine Continent et Continent Destination
2. Origine et destination Continent Pays

par exemple:

Cas 1.

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

Case 2.

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

Est-ce que cela peut être fait pour que je puisse ajouter plus de colonnes/crit Eria assez facilement?

+0

Dans une situation similaire, j'ai utilisé un formulaire qui permettait à l'utilisateur de sélectionner des critères et de créer les requêtes dans VBA. Je ne suis pas sûr que vous obtiendrez une solution satisfaisante de SQL seulement. – Fionnuala

Répondre

1

Cas 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 

Cas n ° 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

S'il vous plaît noter que les balises comprennent MS Access, SQL est un tag générique, cette réponse particulière nécessite MS Access SQL. Ce qui précède ne fonctionnera pas. – Fionnuala

+0

Je ne vois pas comment je peux appliquer des critères sur des attributs pour obtenir des comptes spécifiques en utilisant cette réponse. l'accès renvoie également une erreur de syntaxe dans la clause FROM. – user1155872

+0

vous devez ajouter vos attributs dans select et grouper par, bien sûr, il va jeter une erreur, il y a ...- s dans la déclaration – ogres

0

Vous pouvez joindre les requêtes avec des requêtes, c'est donc un tableau croisé pour Homme/Femme (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; 

C'est l'âge:

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); 

Cette combine les deux:

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

Comme vous pouvez le voir, cela pourrait être plus facile à gérer en VBA.

Questions connexes