2012-11-23 11 views
5

pracuję w MS Access 2003.SQL 2 stoliki, dostać liczy na pierwszej, drugiej grupy przez

Mam tabelę z zapisów tego rodzaju konstrukcji:

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

Mam też stół który ma pochodzenie i przeznaczenie Kody zgrupowane

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

Co potrzebne jest, aby dostać 2 tabele, które liczyłbym rekordy na podstawie kryteriów związanych z atrybutami określić ale pogrupowane według:
1. Pochodzenie Kontynent i Destination Kontynent
2. Pochodzenie Kontynent i kraj

na przykład:

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

Można to zrobić w taki sposób, żebym mógł dodać więcej kolumn/krytyków eria łatwo wystarczy?

+0

W podobnej sytuacji użyłem formularza, który pozwolił użytkownikowi wybrać kryteria i zbudować zapytania w VBA. Nie jestem pewien, czy uzyskasz satysfakcjonujące rozwiązanie SQL. – Fionnuala

Odpowiedz

1

Przypadek 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 

Przypadek 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

Należy pamiętać, że tagi obejmują MS Access, SQL to ogólny znacznik, więc ta konkretna odpowiedź wymaga MS Access SQL. Powyższe nie zadziała. – Fionnuala

+0

Nie widzę sposobu, w jaki można zastosować kryteria dotyczące atrybutów, aby uzyskać określone liczby za pomocą tej odpowiedzi. również dostęp do składni błędu rzutowania w klauzuli FROM. – user1155872

+0

powinieneś dodać swoje atrybuty w select i group, również, oczywiście spowoduje to błąd, są ... – ogres

0

Możesz dołączyć zapytań z zapytaniami, więc jest to krzyżowa dla mężczyzn/kobiet (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; 

To jest wiek:

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

ten łączy w sobie dwa:

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

Jak widać, może to być łatwiejsze do zarządzania w VBA.