2010-01-11 166 views
14

我甚至不知道我是否以正確的方式執行此查詢。 有一個Sandwiches表有7個字段,其中2個是組合框(TypeBread)。選擇查詢選擇語句

所以我提出,結合了所有組合框的值到一個查詢,這樣的查詢:

SELECT TypesAndBreads.TBName, TypesAndBreads.Type 
FROM (SELECT [Sandwiches Types].[Sandwich Type] As TBName, "Sandwich Type" As Type 
    FROM [Sandwiches Types] 
UNION ALL 
    SELECT Breads.Bread As TBName, "Bread" As Type 
    FROM Breads) AS TypesAndBreads; 

我拿到表的平值,現在我要統計所有在每個TypesAndBreads.TBName三明治。我有這個,只是爲了確保它的工作原理與所有的三明治:

SELECT TypesAndBread.Type, TypesAndBread.TBName, 
     (SELECT Count(Sandwiches.[SandwichID]) As SandwichCount 
     FROM Sandwiches) As SandwichCount 
FROM TypesAndBread; 

但我想引用裏面的子查詢當前Type和TBName。像這樣的:

SELECT TypesAndBread.Type, TypesAndBread.TBName, 
     (SELECT Count(Sandwiches.[SandwichID]) As SandwichCount 
     FROM Sandwiches 
     WHERE Sandwiches.[TypesAndBread.Type] = Sandwiches.[TypesAndBread.TBName]) As SandwichCount 
FROM TypesAndBread; 

但當然這是行不通的。我不認爲這會,只是想嘗試一下。我正在考慮使用VBA構建查詢,當他們打開此查詢將基於的報告時。

所以我想我的問題是:有沒有辦法引用子查詢中當前選定的字段?還是有不同的方法來解決這個問題?

感謝您的幫助

編輯: 我的表結構是這樣的:

Sandwiches的領域

| SandwichID | Name | Date Added | Chef | Sandwich Type | Bread | Reviewed By | 

其中Sandwich TypeBread是這些表的查閱字段:

Sandwiches Types的領域

| Sandwich Type | 

Breads的領域

| Bread | 

的TypesAndBreads查詢相結合的三明治類型和麪包表,但之所以說是爲了讓我可以得到所有的三明治伯爵那種類型或麪包。像這樣的結果:

+=============================================+ 
|  Type  | TBName | SandwichCount | 
+=============================================+ 
| Sandwich Type | Turkey Club |   10 | 
| Bread   | Italian  |    5 | 
| Bread   | Garlic  |    8 | 
+---------------------------------------------+ 

的例子結果的第一行basicly說,有10個三明治與三明治類型字段等於土耳其俱樂部紀錄。

我希望能更好地解釋它。

+0

我發現這有點混亂。你可以發佈你的表格結構和所需的輸出嗎? – RedFilter 2010-01-11 18:24:45

+0

我添加了表結構和一些所需的輸出,希望有所幫助。感謝您的評論。 – 2010-01-11 20:04:17

回答

17

不知道Access支持,但在大多數發動機(包括SQL Server)這就是所謂的相關子查詢和正常工作:

SELECT TypesAndBread.Type, TypesAndBread.TBName, 
     (
     SELECT Count(Sandwiches.[SandwichID]) As SandwichCount 
     FROM Sandwiches 
     WHERE (Type = 'Sandwich Type' AND Sandwiches.Type = TypesAndBread.TBName) 
       OR (Type = 'Bread' AND Sandwiches.Bread = TypesAndBread.TBName) 
     ) As SandwichCount 
FROM TypesAndBread 

這可以通過索引TypeBread和分配更有效率子查詢結果爲UNION

SELECT [Sandwiches Types].[Sandwich Type] As TBName, "Sandwich Type" As Type, 
     (
     SELECT COUNT(*) As SandwichCount 
     FROM Sandwiches 
     WHERE Sandwiches.Type = [Sandwiches Types].[Sandwich Type] 
     ) 
FROM [Sandwiches Types] 
UNION ALL 
SELECT [Breads].[Bread] As TBName, "Bread" As Type, 
     (
     SELECT COUNT(*) As SandwichCount 
     FROM Sandwiches 
     WHERE Sandwiches.Bread = [Breads].[Bread] 
     ) 
FROM [Breads] 
+0

Jet/ACE一直支持相關的子查詢。但是,它們在索引使用方面通常沒有很好的優化。 – 2010-01-11 19:41:03

4

我過於複雜了。長時間休息和回來後,所需的輸出可以通過這個簡單的查詢來實現:回答

SELECT Sandwiches.[Sandwich Type], Sandwich.Bread, Count(Sandwiches.[SandwichID]) AS [Total Sandwiches] 
FROM Sandwiches 
GROUP BY Sandwiches.[Sandwiches Type], Sandwiches.Bread; 

謝謝,這幫助了我的思路。