2016-06-20 15 views
0

Sorry, wenn dies eine dumme Frage sein wird, ist es das erste Mal, dass ich mit gespeicherten SQL-Prozeduren arbeiten. Die Frage ist einfach - wie kann ich erklären, ob die Anweisung in SELECT? Um zu zeigen, was ich meine, hier ist ein Code, den ich derzeit haben:SQL Stored procedures wenn Anweisung innerhalb wählen

INSERT INTO @trAll 
SELECT tr.EventDateTime 
    ,tr.OrderId 
    ,'EX' 
    ,round(tr.Prod01_CompB_QuantityPV_LTR + tr.Prod01_Fuel_QuantityPV_LTR,0) 
    ,tr.eAD 
    ,tr.OperatorName 
    -- 
    ,cmr.ConsigneeName 
    ,cmr.ConsigneeCompanyCode 
    ,cmr.SenderName 
    ,cmr.SenderCompanyCode 
FROM vwTransaction AS tr 
inner join tbOrderDetailCMR as cmr 
on tr.orderid = cmr.OrderId 
WHERE tr.EventDateTime BETWEEN @From 
     AND @to 
     AND ProductName = 'BIODIESELZ' 

Und das ist, was ich brauche (hoffen, dass Sie verstehen, was ich meine):

INSERT INTO @trAll 
SELECT tr.EventDateTime 
    ,tr.OrderId 
    ,'EX' 
    ,round(tr.Prod01_CompB_QuantityPV_LTR + tr.Prod01_Fuel_QuantityPV_LTR+ (if (tr.Prod01_AdditiveA>0) THEN tr.Prod01_AdditiveA ELSE tr.Prod01_AdditiveB),0) 
    ,tr.eAD 
    ,tr.OperatorName 
    -- 
    ,cmr.ConsigneeName 
    ,cmr.ConsigneeCompanyCode 
    ,cmr.SenderName 
    ,cmr.SenderCompanyCode 
FROM vwTransaction AS tr 
inner join tbOrderDetailCMR as cmr 
on tr.orderid = cmr.OrderId 
WHERE tr.EventDateTime BETWEEN @From 
     AND @to 
     AND ProductName = 'BIODIESELZ' 

Kurz gesagt, was ich brauche, ist Hinzufügen von Additiv A, wenn sein Wert größer als 0 ist, sonst AdditivB in der Select-Anweisung.

+1

Welche DBMS verwenden Sie? –

Antwort

4

Durch die Syntax Sie verwenden Ich gehe davon aus, dass dieses T-SQL (Microsoft SQL-Server) ist:

Sie können nicht IF in einer Aussage wie diese verwenden. Verwenden Sie CASE hier, wie folgt aus:

... 
,round(tr.Prod01_CompB_QuantityPV_LTR + tr.Prod01_Fuel_QuantityPV_LTR+ 
(CASE 
    WHEN (tr.Prod01_AdditiveA>0) THEN tr.Prod01_AdditiveA 
    ELSE tr.Prod01_AdditiveB 
END),0) 
... 

EDIT: In der Tat, jetzt, wo ich las es, Antwort Ashwin Nairs ist noch besser. Er verwendet den Befehl IIF, der weniger "aufdringlich" ist. Vielleicht möchten Sie seine Antwort anschauen und/oder akzeptieren.

3

Angenommen, Sie SQL-Server verwenden, versuchen iif anstelle

INSERT INTO @trAll 
SELECT tr.EventDateTime 
,tr.OrderId 
,'EX' 
,round(tr.Prod01_CompB_QuantityPV_LTR + tr.Prod01_Fuel_QuantityPV_LTR+ iif(tr.Prod01_AdditiveA>0, tr.Prod01_AdditiveA, tr.Prod01_AdditiveB),0) 
,tr.eAD 
,tr.OperatorName 
-- 
,cmr.ConsigneeName 
,cmr.ConsigneeCompanyCode 
,cmr.SenderName 
,cmr.SenderCompanyCode 
FROM vwTransaction AS tr 
inner join tbOrderDetailCMR as cmr 
on tr.orderid = cmr.OrderId 
WHERE tr.EventDateTime BETWEEN @From 
    AND @to 
    AND ProductName = 'BIODIESELZ' 
Verwandte Themen