![]() |
Datenbank: mssql server • Zugriff über: ADO
SQL Abfrage ich habs nicht drauf
Folgendes Problem:
Tabelle A Stellplatz Anzahl 1A 3 1B 2 2B 2 Tabelle B Vorgang Stellplatz Laden 1A Laden 1B Abladen 2B Kurze Erklärung: Tabelle A enthält die verfügbaren Stellplatzbezeichnungen und die Anzahl der dort verfügbaren Stellplätze. Tabelle B enthält die Vorgänge und die zugeordneten Stellplätze, wobei es sein kann, dass ein Vorgang auf mehreren Stellplätzen möglich ist (z.B. Laden). Für eine Übersicht benötigen ich jetzt ein Abfrageergebnis, das alle verfügbaren Stellplätze, mit Anzahl der Stellplätzen anzeigt und in einer zusätzlichen Spalte anzeigt, ob der Stellplatz für EINEN bestimmten Vorgang zulässig ist. Also beispielsweise für den Vorgang Laden soll das Ergebnis so aussehen: Stellplatz Anzahl Laden 1A 3 JA 1B 2 JA 2B 2 NEIN Ob in der Spalte "Laden" "JA" oder "NEIN" steht oder 0/1 ist egal, die Tabelle wird eh grafisch aufbereitet. Wie könnte eine SQL-Abfrage dafür aussehen und gibt es überhaupt eine? Gruß, Guido |
Re: SQL Abfrage ich habs nicht drauf
generell müsstest Du nur die Anzahl der möglichen Vorgänge *zählen* und dann ggf. aus Werten >1 eine 0 und bei einem Wert = 1 eine 1 daraus machen.
SQL-Code:
Liefert Dir die Anzahl der möglichen Vorgänge pro Stellplatz. Entweder reicht dir das und Du verwuselst die 'Summe' selbst, oder Du verwendest eine Subquery, um das Ergebnis korrekt darzustellen
select A.StellPlatz,
B.Anzahl, Sum (distinct B.Vorgang) as Summe from A join B on A.StellPlatz = B.StellPlatz
SQL-Code:
Du kannst in einem 'select' anstattt eines Tabellennames auch ein eigenes 'select' verwenden. Du musst es nur mit einem Namen versehen. Ich habe das Ding einfach 'x' genannt.
Select StellPlatz,
Anzahl, Case When Summe = 1 Then 1 Else 0 End as Laden From ( select A.StellPlatz, B.Anzahl, Sum (distinct B.Vorgang) as Summe from A join B on A.StellPlatz = B.StellPlatz ) x |
Re: SQL Abfrage ich habs nicht drauf
So sollte es auch gehen:
SQL-Code:
SELECT TabelleA.Stellplatz, TabelleA.Anzahl,
Laden = Case WHEN TabelleB.Vorgang = 'Laden' THEN 'Ja' WHEN TabelleB.Vorgang <> 'Laden' THEN 'Nein' End FROM TabelleA INNER JOIN TabelleB ON TabelleA.Stellplatz = TabelleB.Stellplatz Order By TabelleA.Stellplatz; |
Re: SQL Abfrage ich habs nicht drauf
So wie Catbytes habe ich es auch gelöst ist die beste und einfachste Variante
|
Re: SQL Abfrage ich habs nicht drauf
Hi,
ich hab´ auch noch eine Variante:
SQL-Code:
select
A.Stellplatz, A.Anzahl, Laden = count(b.vorgang) from A left join B on B.Stellplatz = A.Stellplatz and B.Vorgang = 'Laden' group by a.Stellplatz, a.anzahl order by a.stellplatz |
Re: SQL Abfrage ich habs nicht drauf
SUPER DANKE!
Ich habe jetzt alle Varianten durchprobiert und die von NormanNG liefert genau das Ergebnis, welches ich möchte. Danke dafür! Auch den anderen vielen Dank, ich habe auf jeden Fall einiges dabei gelernt. Guido |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz