2017-07-05 3 views
0

Ich habe eine gespeicherte Prozedur. In dieser where-Bedingung möchte ich den Nicht-Null-Wert auswählen, falls vorhanden, andernfalls den Null-Wert aus der Tabelle auswählen. Jede Bitte helfen Sie mir ..Bedingung innerhalb einer Where-Klausel in sql

ALTER PROCEDURE SearchPromotionBYPromotionANDVehicleID 

@PromotionCode VARCHAR(100) 
,@TypeId INT 
,@LocationId INT 
,@ClientId INT 
AS 
BEGIN 

SET NOCOUNT ON; 


SELECT top 1 tp.PromotionID 
    ,tp.PromotionCode 
    ,tp.ClientID 
    ,tp.StartDate 
    ,tp.EndDate 
    ,tp.VehicleTypeId 
    ,tv.VehicleType 
    ,tp.LocationId 

FROM tblstudent tp 
LEFT OUTER JOIN tblType tv ON tp.TypeId = tv.TypeId 
WHERE tp.PromotionCode = @PromotionCode 

    AND 
    ((@LocationId IS NOT NULL AND tp.LocationId = @LocationId) OR (tp.LocationId IS NULL) OR (@LocationId IS NULL) or (tp.LocationId = 0)) 

In diesem betrachten 2 Datensätze (R1 und R2) mit dem gleichen Promotion-Code und einem mit allen Standorten (dh Standort-ID 0) und zum anderem mit einer Standort-ID. Wenn der Parameter @locationId einen Wert hat (der Wert ist gleich dem Wert des Datensatzes r2), muss er den Datensatz 2 zurückgeben. Andernfalls muss r1 zurückgegeben werden.

+0

Das Problem ist, wenn ich einen Datensatz mit einer locationID1, und dann mit 0 locationID2 hinzufügen, und ein anderes mit einer anderen Standort-ID, wenn ich locationID2 auswählen möchte, der Datensatz mit locationId 0 zurück –

+0

Anstatt Ihre Beispieldaten in Worten zu beschreiben, verwenden Sie DDL + DML dafür. So können wir es in eine Testumgebung kopieren und Ihnen eine genaue Antwort geben. Fügen Sie außerdem die Tags für das relevante RDBMS hinzu, das Sie verwenden (Produkt- und Versionstag). –

Antwort

0
WHERE tp.PromotionCode = @PromotionCode 
AND ((@LocationId IS NOT NULL AND tp.LocationId = @LocationId) OR tp.LocationId IS NULL) 

Diese Bedingung wählt jene Werte, bei denen @LocationId eine nicht null hat und nicht den Wert 0, und der Wert muss mit tp.LocationId, sonst passen sie diejenigen zurück, wo tp.LocationId ist Null. Ist es das Ergebnis, was Sie wollen? Wenn Sie anders wollen, lassen Sie es mich wissen