Top-Themen

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
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, 26052 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 ..
Ähnliche Inhalte
Datenbanken
Werte aus einer Tabelle ersetzen Werte aus einer anderen Tabelle
Frage von neotm1Datenbanken2 Kommentare

Hallo, ich versuche mit MSSQL eine Abfrage hinzubekommen, in der Werte Aus Tabelle1 Spalte2 in eine andere Tabelle schreibt, ...

VB for Applications
Werte aus einer Tabelle vergleichen, einlesen und addieren
gelöst Frage von halbschuh107VB for Applications2 Kommentare

Hallo zusammen, leider bin ich ein absoluter Anfänger und muss mit VBA gleich eine schwierige Aufgabe auf Arbeit lösen. ...

Datenbanken
SQL - Zwei Tabellen zusammenführen
gelöst Frage von Memo66Datenbanken6 Kommentare

Hallo, ich bin dabei SQL zu lernen und habe mir dazu eine Fußballdatenbank angelegt. Ich habe nun folgendes Problem ...

Microsoft Office
Excel Filter Vergleich zweier Tabellen
gelöst Frage von Dr.CornwallisMicrosoft Office5 Kommentare

Hallo zusammen, ich möchte 2 Tabellen in einer Excel Datei vergleichen, dabei sollen die Werte aus der Tabelle "ausgeschiedene ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 15 StundenWindows 102 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 17 StundenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 1 TagInternet3 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 1 TagDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
TK-Netze & Geräte
VPN-fähige IP-Telefone
Frage von the-buccaneerTK-Netze & Geräte16 Kommentare

Hi! Weiss noch jemand ein VPN-fähiges IP-Telefon mit dem man z.B. einen Heimarbeitsplatz gesichert anbinden könnte? Habe nur einen ...

Windows Server
GPO nur für bestimmte Computer
Frage von Leo-leWindows Server13 Kommentare

Hallo Forum, gern würde ich ein Robocopy script per Bat an eine GPO hängen. Wichtig wäre aber dort der ...

Windows Server
KMS Facts for Client configuration
Frage von winlinWindows Server13 Kommentare

Hey Leute, wir haben in unserem Netz nun einen neuen KMS Server. Haben Bestands-VMs die noch nicht aktiviert sind. ...

Windows Tools
Software-Tool zum Entfernen von bösartigem Windows
Frage von emeriksWindows Tools11 Kommentare

Hi, siehe Betreff hat das jemals irgendjemand schonmal sinnvoll eingesetzt? (MRT) E.