2017-10-09 1 views
-1

Drei Tabellen miteinander in der folgenden Weise verbunden sind:
Mitarbeiter (ID, Name) Gehalt (ID, employee_id, Vendor_id, TOTAL_AMOUNT, date_paid) durch Mitarbeiter-ID
Gehalt (ID, employee_id , Vendor_id) an Vendor (Id, Name) nach Vendor ID
Jede Mitarbeiter ID hat mindestens 2 Lieferanten.
Allerdings ist ein Anbieter für alle Mitarbeiter gleich - "ABC"
Ich brauche eine Liste der Mitarbeiter, die Vendor ABC nicht bezahlt wurde.
Zum Beispiel:Finden Sie den fehlenden Eintrag

Employee Vendor Month Total_amount 
123  ABC  Jan 150 
123  DEF  Jan 200 
456  ABC  Jan 150 
456  XYZ  Jan 250 
123  DEF  Feb 200 
456  ABC  Feb 150 
456  XYZ  Feb 250 

Mein Ergebnis employee_id 123 für Februar werden sollte, da Vendor ABC in diesem Monat nicht bezahlt wurde.

+0

Ok. Das überdenken. Ich denke, Sie brauchen eine Monat/Jahr-Tabelle, um zu zeigen, welche Monate sie keinem Angestellten gezahlt haben. Und ist der Betrag, den ABC für alle Mitarbeiter zahlt? Zu viele unbeantwortete Variablen. –

+0

Sie bezahlten den Angestellten jeden Monat durch die Verkäufer. Und ja, die Menge ist immer gleich. – Radhika

+0

Ok. Deshalb brauchen Sie eine Monat/Jahr-Tabelle, um zu sehen, in welchem ​​Monat sie einen Mitarbeiter nicht bezahlen. Auch wenn es sich um eine temporäre Tabelle handelt, die Sie in Ihrer Abfrage deklarieren. –

Antwort

0

SQL Fiddle

Oracle 11g R2 Schema Einrichtung:

CREATE TABLE table_name (Employee, Vendor, Month, Total_amount) AS 
SELECT 123, 'ABC', 'Jan', 150 FROM DUAL UNION ALL 
SELECT 123, 'DEF', 'Jan', 200 FROM DUAL UNION ALL 
SELECT 456, 'ABC', 'Jan', 150 FROM DUAL UNION ALL 
SELECT 456, 'XYZ', 'Jan', 250 FROM DUAL UNION ALL 
SELECT 123, 'DEF', 'Feb', 200 FROM DUAL UNION ALL 
SELECT 456, 'ABC', 'Feb', 150 FROM DUAL UNION ALL 
SELECT 456, 'XYZ', 'Feb', 250 FROM DUAL; 

Abfrage 1:

WITH EVA(Employee, Vendor, Total_Amount) AS (
    SELECT DISTINCT 
     Employee, 
     Vendor, 
     Total_Amount 
    FROM table_name 
), 
Months (Month) AS (
    SELECT DISTINCT MONTH FROM table_name 
) 
SELECT Employee, Vendor, Month, Total_Amount 
FROM EVA CROSS JOIN Months 
MINUS 
SELECT Employee, Vendor, Month, Total_Amount 
FROM table_name 

Results:

| EMPLOYEE | VENDOR | MONTH | TOTAL_AMOUNT | 
|----------|--------|-------|--------------| 
|  123 | ABC | Feb |   150 | 
Verwandte Themen