2010-01-11 17 views
14

मुझे यह भी नहीं पता कि मैं यह प्रश्न सही तरीके से कर रहा हूं या नहीं। एक Sandwiches तालिका है जिसमें कुछ 7 फ़ील्ड हैं और उनमें से 2 comboboxes (Type और Bread) हैं।एक चुनिंदा क्वेरी चुनने का चयन करें

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 के तहत सभी सैंडविच की गणना करना चाहते मिलती है:

तो मैं एक प्रश्न है कि एक क्वेरी में comboboxes सभी मान को जोड़ती है, इस तरह बनाया है। मैं यह सिर्फ यकीन है कि यह सब सैंडविच के साथ काम करता बनाने के लिए है,:

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

लेकिन मैं संदर्भ के लिए वर्तमान प्रकार और 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; 

लेकिन निश्चित रूप से यह काम नहीं करता है। मुझे नहीं लगता था कि यह होगा, बस कोशिश करने का विचार किया। मैं शायद वीबीए के साथ क्वेरी का निर्माण करने के बारे में सोच रहा था जब वे रिपोर्ट खोलते हैं कि यह क्वेरी आधारित होगी।

तो मुझे लगता है कि मेरा प्रश्न है: क्या उपरोक्त में मौजूदा चयनित फ़ील्ड को संदर्भित करने का कोई तरीका है? या इस दृष्टिकोण के लिए एक अलग तरीका है?

मदद के लिए धन्यवाद

संपादित करें: मेरे तालिका संरचना इस तरह है:

Sandwiches के क्षेत्रों

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

जहां Sandwich Type और Bread इन तालिकाओं के लिए लुक क्षेत्र हैं:

Sandwiches Types के क्षेत्रों

| Sandwich Type | 

Breads के क्षेत्रों

| Bread | 

TypesAndBreads क्वेरी संयुक्त सैंडविच प्रकार और ब्रेड टेबल, लेकिन उस के लिए कारण है, ताकि मैं सब सैंडविच की गिनती प्राप्त कर सकते हैं उस प्रकार या रोटी है। इस तरह का परिणाम:

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

उदाहरण परिणाम की पहली पंक्ति मूल रूप से कहते हैं सैंडविच प्रकार फ़ील्ड तुर्की क्लब के बराबर के साथ रिकॉर्ड में 10 सैंडविच देखते हैं।

मुझे आशा है कि यह बेहतर समझाएगा।

+0

मुझे यह थोड़ा उलझन में मिल रहा है। क्या आप अपनी टेबल संरचना और वांछित आउटपुट पोस्ट कर सकते हैं? – RedFilter

+0

मैंने टेबल संरचना और कुछ वांछित आउटपुट जोड़ा, उम्मीद है कि मदद करता है। टिप्पणी के लिए धन्यवाद। –

उत्तर

17

सुनिश्चित नहीं हैं कि अगर इसे एक्सेस का समर्थन करता है, लेकिन (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 

यह अनुक्रमण Type और Bread और वितरण के द्वारा और अधिक कुशल बनाया जा सकता है सबक्वेरी 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

जेट/एसीई ने हमेशा सहसंबंधित सबक्वायरी का समर्थन किया है। हालांकि, वे अक्सर इंडेक्स उपयोग के मामले में अच्छी तरह अनुकूलित नहीं होते हैं। –

4

मैं अपने आप को ओवर-उलझी थी। एक लंबे ब्रेक ले रहे हैं और वापस आने के बाद, वांछित आउटपुट इस सरल प्रश्न द्वारा पूरा किया जा सकता है: जवाब देने के लिए

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

धन्यवाद, यह सोचा था की मेरी गाड़ी में मदद की।

संबंधित मुद्दे