webentwicklung-frage-antwort-db.com.de

Eine Auswahlabfrage, die eine Auswahlanweisung auswählt

Ich weiß nicht einmal, ob ich diese Abfrage richtig mache. Es gibt eine Sandwiches Tabelle mit 7 Feldern und 2 davon sind Comboboxen (Type und Bread).

Daher habe ich eine Abfrage erstellt, in der alle Combobox-Werte in einer Abfrage zusammengefasst sind:

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;

Ich bekomme die Pauschalwerte der Tabellen, jetzt möchte ich alle Sandwiches unter jedem TypesAndBreads.TBName Zählen. Ich habe dies, nur um sicherzustellen, dass es mit allen Sandwiches funktioniert:

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

Aber ich möchte den aktuellen Typ und TBName in der Unterabfrage referenzieren. Etwas wie das:

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

Aber das funktioniert natürlich nicht. Ich habe nicht gedacht, dass es so sein wird, sondern nur daran gedacht, es zu versuchen. Ich habe darüber nachgedacht, die Abfrage möglicherweise mit VBA zu erstellen, wenn sie den Bericht öffnen, auf dem diese Abfrage basieren soll.

Meine Frage lautet also: Gibt es eine Möglichkeit, auf die aktuell ausgewählten Felder in einer Unterabfrage zu verweisen? Oder gibt es eine andere Herangehensweise?

Danke für die Hilfe

EDIT: Meine Tabellenstruktur sieht so aus:

Felder von Sandwiches

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

dabei sind Sandwich Type und Bread Suchfelder für diese Tabellen:

Felder von Sandwiches Types

| Sandwich Type |

Felder von Breads

| Bread |

Bei der Abfrage "TypesAndBreads" wurden die Tabellen "Sandwiches Types" und "Breads" kombiniert. Der Grund hierfür ist jedoch, dass ich die Anzahl aller Sandwiches mit diesem Typ oder Brot ermitteln kann. Ein Ergebnis wie dieses:

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

die erste Zeile des Beispielergebnisses besagt im Wesentlichen, dass 10 Sandwiches mit dem Feld Sandwich Type (Sandwich-Typ) gleich Turkey Club (Türkei-Club) im Datensatz sind.

Ich hoffe das erklärt es besser.

16
Tony L.

Ich bin nicht sicher, ob Access dies unterstützt, aber in den meisten Engines (einschließlich SQL Server) Dies wird als korrelierte Unterabfrage bezeichnet und funktioniert einwandfrei:

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

Dies kann effizienter gestaltet werden, indem Type und Bread indiziert und die Unterabfragen auf UNION verteilt werden:

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]
22
Quassnoi

Ich habe mir zu viele Komplikationen gemacht. Nach einer langen Pause und Rückkehr könnte die gewünschte Ausgabe durch diese einfache Abfrage erreicht werden:

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

Vielen Dank für die Beantwortung, es hat mir dabei geholfen.

5
Tony L.