Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

SQL-Abfrage - 2 mal COUNT auf gleiche Spalte einer Tabelle.

Frage Entwicklung Datenbanken

Mitglied: JosefSepp

JosefSepp (Level 1) - Jetzt verbinden

27.07.2011, aktualisiert 13:36 Uhr, 7086 Aufrufe, 3 Kommentare

Hallo,

Ich habe folgendes Problem.

Ich habe die Tabelle "Lieferscheine" in der Datenbank.

Nun soll herausgefunden welcher Lieferant, wie viele Lieferscheine hat.

Sinngemäß:

__________________

Select lieferant, count(*)

from lieferscheine

where lieferant in (1,2,3,4,5)

group by lieferant

___________________

Zugleich soll herausgefunden welche Lieferscheine bei den jeweiligen Lieferanten noch offen sind.

Sinngemäß:
______________________

Select lieferant, count(*)

from lieferscheine

where lieferant in (1,2,3,4,5)
and status = 1

group by lieferant

_______________________


Nun sollen die beiden Abfragen zusamengeführt werden, dass die Ausgabe so aussieht

Lieferant |LS_komplett |LS_offen
1 |2131 |1001
2 |1234 |700
3 |3429 |100
4 |21241 |5000




Gibt es eine Möglichkeit, dies zu realisieren?

Im Voraus schon mal besten Dank für Eure Hilfe.

mfg

JosefSepp
Mitglied: AndreasHoster
27.07.2011 um 14:17 Uhr
Die einfache Lösung wäre:
Die beiden Statements oben als View bauen und dann eine View, die die beiden über einen Join zusammennimmt.

Wenn man es als einzelnes Select Statement haben will, es sollte auch sowas gehen (ungetestet):
01.
Select t1.Lieferant, t1.Komplett, t2.Offen 
02.
from 
03.
(Select lieferant, count(*) as komplett from lieferscheine where lieferant in (1,2,3,4,5) group by lieferant) as t1, 
04.
(Select lieferant, count(*) as offenfrom lieferscheine where lieferant in (1,2,3,4,5) and status=1 group by lieferant) as t2 
05.
where t1.Lieferant=t2.Lieferant
Im Moment werden damit nur Lieferanten gefunden, die auch offene Posten haben, muß man halt den Inner Join in ein Outer Join umwandeln, aber da weiß ich die Syntax gerade nicht auswendig.
Bitte warten ..
Mitglied: dog
27.07.2011 um 15:24 Uhr
Am einfachsten ist ein Subselect:

01.
SELECT 
02.
  t.*, 
03.
  COUNT(*) AS Gesamt, 
04.
  (SELECT COUNT(*) FROM Lieferscheine t2 WHERE t2.Lieferant = t.Lieferant AND t2.Status = 1) AS Offen 
05.
FROM 
06.
  Lieferscheine t 
07.
WHERE 
08.
  t.Lieferant IN (1,2,3) 
09.
GROUP BY 
10.
  t.Lieferant
(ungetestet)
Bitte warten ..
Mitglied: JosefSepp
10.08.2011 um 09:19 Uhr
So bin gerade wieder aus dem Urlaub zurück und werde beide Varianten mal testen. Vielen Dank!
Bitte warten ..
Ähnliche Inhalte
Datenbanken
gelöst SQL-Abfrage mit "kleiner gleich" funktioniert nicht (2)

Frage von derSESO zum Thema Datenbanken ...

Datenbanken
gelöst Hilfe bei SQL-Abfrage (5)

Frage von emeriks zum Thema Datenbanken ...

Datenbanken
gelöst SQL ORDER BY und Join mit 2 Tabellen (7)

Frage von Dipps zum Thema Datenbanken ...

Neue Wissensbeiträge
Windows Installation

Unorthodoxer Weg, um an einen Offline-Installer für Adobe Flash zu kommen

(14)

Tipp von beidermachtvongreyscull zum Thema Windows Installation ...

Datenschutz

Gefährdeter Datenschutz: Firefox löscht lokale Datenbanken nicht

(1)

Information von BassFishFox zum Thema Datenschutz ...

Firewall

PfSense OpenVPN beschleunigen

Tipp von Dobby zum Thema Firewall ...

Heiß diskutierte Inhalte
Utilities
CCleaner 5.33 mit Malware infiziert (27)

Information von SeaStorm zum Thema Utilities ...

Windows Systemdateien
Windows bootet nicht mehr Fehlermeldung 0xc0000098 (19)

Frage von franzgoerlich zum Thema Windows Systemdateien ...

LAN, WAN, Wireless
gelöst 802.1X-Authentifizierung (16)

Frage von Alex29 zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Dateien mit Intelligenz per GPO ins Programmverzeichnis (14)

Frage von erwin.t zum Thema Windows Netzwerk ...