Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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
GELÖST

SQL - Werte in zwei Tabellen vergleichen - Aus einer Tabelle sollen nur bestimmet Datensätze verwendet werden

Frage Entwicklung Datenbanken

Mitglied: XSD2612

XSD2612 (Level 1) - Jetzt verbinden

08.07.2010, aktualisiert 20:17 Uhr, 22100 Aufrufe, 2 Kommentare

Halllo zusammen, ich habe ein kniffliges SQL - Problem und hoffe mir kann jemand weiterhelfen

Ich habe zwei Tabellen, Tab1, Tab2, die sehen so aus:

Tab1:
Artikel_NrPreisliste_NrDatumPreis
1202010051111,20
210201005117,30
310201005115,60
320201005115,80
330201005116,20
4102010051162,30

Tab2:
Artikel_Nr Preis_KennzeichenDatumPreis
1E2010061210,60
1E2010063010,40
1E2010052011,50
1F2010061011,30
2E200912167,30
2F200908177,50
2G201001137,20
3E200906205,70
3E201004155,60
4E2009061364,20
4G2008060361,20
4G2009021665,40

Nun möchte ich die Artikel finden, die in Tab1 und Tab2 einen unterschiedlichen Preis haben, und zwar unter folgenden Bedingungen:
Nur die Artikel vergleichen, bei denen in Tab1 die Preisliste_Nr = 10 ist.
Diese sollen mit den entspechenden Artikeln in Tab2 verglichen werden, bei denen das Preis_Kennzeichen = E ist und die dort das neuese Datum haben (also wo das Datum am größten ist)

Das Ergebniss sollte so aussehen:
Artikel_Nr Preisliste_NrDatum Preis Artikel_Nr Preis_KennzeichenDatumPreis
1102010051110,3 1E2010063010,40
4102010051162,3 4E2009061364,20

Ich hab das mit folgenden Statement versucht:

select a.Artikel_Nr, a.Preisliste_Nr, a.Datum, a.Preis,
b.Artikel_Nr, b.Preis_Kennzeichen, b.Datum, b.Preis
from Tab1 a, Tab2 b
where a.Artikel_Nr = b.Artikel_Nr
and a.Preisliste_Nr = '10'
and b.Preis_Kennzeichen = 'E'
and a.Preis <> b.Preis;

Als Ergebnis bekomme ich das:
Artikel_Nr Preisliste_NrDatum Preis Artikel_Nr Preis_KennzeichenDatumPreis
1102010051110,31E2010061210,60
1102010051110,31E2010063010,40
1102010051110,31E2010052011,50
310201005115,63E200906205,70
4102010051162,34E2009061364,20

Ist ja auch klar, weil ich in Tab2 die Auswahl nicht auf die Datensätze mit dem neuesten Datum beschränkt hab (b.Datum)

Ich weis aber nicht wie ich das machen soll, ich vermute mit max(b.Datum), weil die Datumswerte so angelegt sind, das die neuesten den höchsten Wert haben. Aber ich habe keine Ahnung wie ich so ein select in das Statement mit einbauen kann

Ich hoffe von Euch kann mir jemand helfen,

Vielen Dank, Matze
Mitglied: Biber
08.07.2010 um 20:36 Uhr
Moin XSD2612,

willkommen im Forum.

Biite bei SQL-Fragen immer das Blech angeben, was drunterliegt.
Denn weniger standardisiert als "SQL" sind nur noch die Rezeptvariationen für "Birne Helene" und deutsche Steuergesetze.

Eine der vielen Möglichkeiten wäre, deine bisherige Abfrage als "innere Abfrage" as is zu erhalten und eine aggregierende Query drumherumzuwickeln.
Oder aber, die Aggregation in einer SubQuery abzufackeln.
Okay, vorher aber noch die bestehende etwas weniger redundant machen.
01.
select  a.Artikel_Nr,  a.Preisliste_Nr,  a.Datum  as Preislistendatum, a.Preis as PL_Preis, 
02.
             b.Preis_Kennzeichen, b.Datum, b.Preis 
03.
from Tab1 a, Tab2 b  
04.
where a.Artikel_Nr = b.Artikel_Nr 
05.
    and a.Preisliste_Nr = '10', 
06.
   and b.Preis_Kennzeichen = 'E' 
07.
   and a.Preis <> b.Preis;
--> Das wäre immer noch "deine" Query, nur ohne doppelte Felder (ist echt nicht nötig) und erst recht ohne doppelte Feldnamen mit unterschiedlichem Inhalt.

Wenn wir jetzt zusätzlich zu "Tab2 b" die Werte aus einer "Grouped By-Tab2" mit Alias c holen

01.
select  a.Artikel_Nr,  a.Preisliste_Nr,  a.Datum  as Preislistendatum, a.Preis as PL_Preis, 
02.
             b.Preis_Kennzeichen, b.Datum, b.Preis 
03.
from Tab1 a, Tab2 b, ( select Artikel_nr, max(Datum) as maxdatum 
04.
                                          from Tab2 
05.
                                            Where   Preis_Kennzeichen = 'E' 
06.
                          Group by Artikel_nr, Preis_Kennzeichen) c 
07.
where a.Artikel_Nr = b.Artikel_Nr 
08.
     and b.Artikel_nr = c.Artikel_nr 
09.
    and a.Preisliste_Nr = '10' 
10.
   and b.Preis_Kennzeichen = 'E'  
11.
   and a.Preis <> b.Preis 
12.
   and b.datum = c.Maxdatum 
13.
;
--> dann sollte es klappen.

Die WHERE-Klausel innerhalb der neuen virtuellen Tabelle c kann ebensogut nach unten - sonst ist das Statement nicht richtig einleuchtend.
01.
select  a.Artikel_Nr,  a.Preisliste_Nr,  a.Datum  as Preislistendatum, a.Preis as PL_Preis, 
02.
             b.Preis_Kennzeichen, b.Datum, b.Preis 
03.
from Tab1 a, Tab2 b, ( select Artikel_nr, Preis_Kennzeichen, max(Datum) as maxdatum 
04.
                            from Tab2  
05.
                          Group by Artikel_nr, Preis_Kennzeichen) c 
06.
where a.Artikel_Nr = b.Artikel_Nr 
07.
     and b.Artikel_nr = c.Artikel_nr 
08.
    and a.Preisliste_Nr = '10' 
09.
   and b.Preis_Kennzeichen = 'E'  
10.
   and b.Preis_Kennzeichen =  c.Preis_Kennzeichen 
11.
   and a.Preis <> b.Preis 
12.
   and b.datum = c.Maxdatum 
13.
;
[ungetestete Skizze]

Grüße
Biber

[Edit] Sorry, das "from Tab2" fehlte bei den beiden Group-by-Varianten unten [/Edit]
Bitte warten ..
Mitglied: XSD2612
09.07.2010 um 08:40 Uhr
Hallo Biber,

vielen Dank für deine Hilfe!!
hat wunderbar funktioniert
Das ganze war für Oracle

Viele Grüße
XSD2612
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Microsoft Office
Excel 2010 - Zwei Tabellen vergleichen (Zugriffsprüfung) (2)

Frage von d4shoerncheN zum Thema Microsoft Office ...

Datenbanken
gelöst SQL . 2 Felder bzw. Werte vergleichen und Rückmeldung 0 oder 1 (2)

Frage von wawidl zum Thema Datenbanken ...

Datenbanken
Spalte in einer SQL-Tabelle auslesen. Werte durch Tab getrennt! (4)

Frage von Janekr77 zum Thema Datenbanken ...

Server
gelöst SQL-Tabelle portieren und dabei Daten konvertieren (1)

Frage von menace zum Thema Server ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
Suche passender Treiber (12)

Frage von stolli zum Thema Windows Server ...