AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Abfrage ich habs nicht drauf
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Abfrage ich habs nicht drauf

Ein Thema von guidobrose · begonnen am 22. Mär 2007 · letzter Beitrag vom 22. Mär 2007
Antwort Antwort
guidobrose
(Gast)

n/a Beiträge
 
#1

SQL Abfrage ich habs nicht drauf

  Alt 22. Mär 2007, 14:03
Datenbank: mssql server • Zugriff über: ADO
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
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: SQL Abfrage ich habs nicht drauf

  Alt 22. Mär 2007, 14:42
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:
select A.StellPlatz,
       B.Anzahl,
       Sum (distinct B.Vorgang) as Summe
from A join B on A.StellPlatz = B.StellPlatz
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


SQL-Code:
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
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Catbytes
Catbytes

Registriert seit: 7. Sep 2002
Ort: Heckendalheim
353 Beiträge
 
Delphi XE5 Enterprise
 
#3

Re: SQL Abfrage ich habs nicht drauf

  Alt 22. Mär 2007, 14:53
So sollte es auch gehen:

SQL-Code:
SELECT TabelleA.Stellplatz, TabelleA.Anzahl,
Laden =
Case
WHEN TabelleB.Vorgang = 'LadenTHEN 'Ja'
WHEN TabelleB.Vorgang <> 'LadenTHEN 'Nein'
End
FROM TabelleA INNER JOIN TabelleB ON TabelleA.Stellplatz = TabelleB.Stellplatz
Order By TabelleA.Stellplatz;
Catbytes
  Mit Zitat antworten Zitat
Benutzerbild von Mr.Gogo
Mr.Gogo

Registriert seit: 21. Mär 2007
Ort: Hamburg
5 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: SQL Abfrage ich habs nicht drauf

  Alt 22. Mär 2007, 15:02
So wie Catbytes habe ich es auch gelöst ist die beste und einfachste Variante
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#5

Re: SQL Abfrage ich habs nicht drauf

  Alt 22. Mär 2007, 15:35
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
Gruß
Norman
  Mit Zitat antworten Zitat
guidobrose
(Gast)

n/a Beiträge
 
#6

Re: SQL Abfrage ich habs nicht drauf

  Alt 22. Mär 2007, 18:27
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz