2016-06-06 9 views
-2

Ich versuche, eine Summe von Preisen aus einer anderen Tabelle einzufügen.mit WHERE-Klausel in INSERT-Trigger SQL

INSERT INTO Invoice_Of_Supplier (OrderSupplierID, PaymentStatus, Cost) 
VALUES (
(SELECT OrderSupplierID FROM inserted), 
0, 
(SELECT SUM([Price(RUB)]) FROM Car 
    JOIN OrderOfSupplier_Car AS osc ON osc.CarID=Car.CarID 
where osc.OrderSupplierID = (select OrderSupplierID from inserted))) 

Ich habe eine Car Tabelle mit Feldern price, CarID etc;

Order_Of_Supplier Tabelle mit Feldern OrderSupplierID, SupplierID;

Und Order_Of_Supplier_Car Tabelle, in der es eine Reihe von Autos für jeden Auftrag ist (Felder sind CarID, OrderSupplierID)

Ich brauche eine Zeile in der Tabelle einzufügen ‚InvoiceOfSupplier‘ mit den Feldern ‚OrderSupplierID‘, PaymentStatus und Cost .

OrderSupplierID und PaymentStatus sind ok, aber Cost ist NULL und ich kann nicht verstehen, warum. Wenn ich auf osc.OrderSupplierID = 2 ändere (bekomme OrderSupplierID direkt) funktioniert es niether. Es funktioniert nur, wenn ich alle Bedingungen wie "WHERE" entferne, aber in diesem Fall erhält es den "Preis (RUB)" aller Aufträge, nicht den, den ich brauche.

EDIT: Das Problem ist, dass in dem Moment-Daten in Order_Of_Supplier eingefügt wurden keine Daten in Order_Of_Supplier_Car dort war.

+0

'SUM ([Preis (RUB)])' .. Preis ist eine Funktion? – Moumit

+1

Unmöglich zu helfen, ohne mehr über Ihre Daten zu erfahren. Woher wissen wir, dass Sie nicht genau die richtigen Ergebnisse erhalten? Bitte posten Sie die Beispieldaten und die Ergebnisse, die Sie erwarten würden. –

+0

Entschuldigung, Preis (Rub) ist eine Spalte, keine Funktion. –

Antwort

0

versuchen, etwas wie folgt aus:

INSERT INTO Invoice_Of_Supplier (OrderSupplierID, PaymentStatus, Cost) 
VALUES (
(SELECT OrderSupplierID FROM inserted), 
0, 
(SELECT SUM(column_name) FROM Car 
where Car.CarID = OrderOfSupplier_Car.CarID 
and OrderOfSupplier_Car.OrderSupplierID in (select OrderSupplierID from inserted)) 
+0

Bitte *** *** erklären, was Sie geändert haben - und warum dies das Problem lösen soll. –

+0

doest Arbeit p.s. Ich musste JOIN OrderOfSupplier_Car hinzufügen, um die Abfrage auszuführen. –

+0

Ich ersetzte '=' zu 'in' und ich denke, dass Sie einen Fehler in SUM haben können ([Preis (RUB)] –

0

Warum wählen Sie nicht nur aus eingefügt?

INSERT INTO dbo.Invoice_Of_Supplier (OrderSupplierID, PaymentStatus, Cost) 
SELECT 
    i.OrderSupplierID, 
    0, 
    SUM(osc.[Price(RUB)]) 
FROM inserted i 
inner join dbo.OrderOfSupplier_Car osc 
on osc.OrderSupplierID = i.OrderSupplierID 
inner join dbo.Car c 
ON c.CarID = osc.CarID 
group by i.OrderSupplierID 

und ich denke, Sie nicht, dass Ihnen Car auf allen

einige Fragen kommen müssen: das ist after oder instead of Auslöser? Auf welchem ​​Tisch ist es?

+0

Es ist 'AFTER' Trigger. Sorry für Misisundering. Ich habe meine Qusetion bearbeitet. –

+0

Dieser Code erstellt keine Zeile in' InvoiceOfSupplier' Tabelle überhaupt. Mybe gibt es einen Weg Änderung in meiner Abfrage, weil das Problem nur mit 'Cost' Feld –

+0

Das Problem ist nicht mit' Cost' Feld - das Problem ist mit ** keine geeigneten Daten ** für diese Abfrage. –