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.
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 –
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). –