2016-05-02 13 views
0

Ich erhalte einen Fehler Falsche Syntax in der Nähe von '>' Jedes der Felder enthalten Dezimalwerte, mit einem NOT NULL und Standardwert von Null. Ich habe verschiedene Klammern ausprobiert, und ich glaube, ich vermisse nur die Formatierung der Aussage des CASE irgendwo.SQL CASE in einer WHERE mit Logik

AND CASE WHEN QtyIssued <> 0 OR WM.QtyToMake <> 0 OR WMat.UnitQtyReqd <> 0 THEN QtyIssued/WM.QtyToMake * WMat.UnitQtyReqd >= .68 ELSE 0 END 

Ich brauche für Null in jedem der Werte zu überprüfen, so dass ich von Null

Die gesamte SQL aufgeführt wird unten nicht dividieren erhalten:

SELECT SUBSTRING([SalesOrder], PATINDEX('%[^0]%', [SalesOrder]+'|'),        LEN([SalesOrder])) AS SO, WM.SalesOrderLine AS SOLine, 
     SUBSTRING(WM.Job, PATINDEX('%[^0]%', WM.Job+'|'), LEN(WM.Job)) AS Job, WMat.StockCode, --WM.QtyToMake * WMat.UnitQtyReqd AS Qty2IssuedValue, 
     CEILING(WM.QtyToMake * WMat.UnitQtyReqd) AS Qty2Issue, 
         CEILING(WMat.QtyIssued) AS QtyIssued, WMP.WipRelease, WM.JobTenderDate, 
         WM.Complete , 
         CASE WHEN QtyIssued = 0 OR WM.QtyToMake = 0 OR WMat.UnitQtyReqd = 0 
         THEN 0 ELSE (QtyIssued/(WM.QtyToMake * WMat.UnitQtyReqd)) END AS QtyNotAllocated 
FROM   dbo.WipMaster AS WM INNER JOIN 
         dbo.[WipMaster+] AS WMP ON WM.Job = WMP.Job FULL OUTER JOIN 
         dbo.WipJobAllMat AS WMat ON WM.Job = WMat.Job 
WHERE  (WMP.WipRelease BETWEEN CONVERT(DATETIME, '2016-04-01 00:00:00', 102) AND 
            CONVERT(DATETIME, '2016-04-29 00:00:00', 102)) 
            AND CASE WHEN QtyIssued <> 0 OR WM.QtyToMake <> 0 OR WMat.UnitQtyReqd <> 0 THEN QtyIssued/WM.QtyToMake * WMat.UnitQtyReqd >= .68 ELSE 0 END 

Antwort

0

Die case im where ist:

(CASE WHEN QtyIssued <> 0 OR WM.QtyToMake <> 0 OR WMat.UnitQtyReqd <> 0 
     THEN QtyIssued/WM.QtyToMake * WMat.UnitQtyReqd >= .68 
     ELSE 0 
END) 

Dies ist kein boolescher Ausdruck. Ich bin mir nicht einmal sicher, was Sie vorhaben. Vielleicht:

((QtyIssued <> 0 OR WM.QtyToMake <> 0 OR WMat.UnitQtyReqd <> 0) AND 
QtyIssued/NULLIF(WM.QtyToMake, 0) * WMat.UnitQtyReqd >= .68 
) 

Die NULLIF() verhindert Division durch Null.

+0

Was ich wollte, war, meinen Kuchen zu haben und es auch zu essen. LOL –

+0

Ich wollte die mit Null-Werten in den Spalten sehen, aber nicht das Problem mit der Division durch Null. Also, hier ist, was ich gefunden habe ... Sorry, neu im Forum und erarbeiten, wie man es benutzt .... –

+0

AND ((QtyIssued <> 0 ODER WM.QtyToMake <> 0 ODER WMat.UnitQtyReqd <> 0 AND) \t \t \t \t \t \t \t \t \t QtyIssued/NULLIF (WM.QtyToMake, 0) * WMat.UnitQtyReqd> = 0,68 OR \t \t \t \t \t \t \t \t \t QtyIssued = 0 oder WM.QtyToMake * WMAT .UnitQtyReqd = 0 –