2017-03-20 167 views
-1

多種選擇我已經嘗試IIF,如果其他和案例似乎沒有工作。如果@ShippedDate中存在值,則單獨查詢該值或查詢其他值。在哪裏條款

WHERE 
    (CASE WHEN @ShippedDate != NULL THEN date_shipped = @ShippedDate 
    ELSE 
    [order].order_date BETWEEN @StartDate AND @EndDate 
    AND program_types.id IN (@ProgTypes) 
    AND employee.id IN (@RepNames) 
    END 
    ORDER BY OrderID 
+0

Case是一個表達式,它用於返回列的值。你不能像這樣使用來有條件地換出其他謂詞。沒有什麼東西等於NULL,就像什麼都不等於NULL一樣。 –

+0

'id IN(@ProgTypes)'?這在SQL Server中甚至可能嗎? 「@ ProgTypes」是某種數組變量嗎? –

+0

@ThorstenKettner確信只要它只包含一個值就可以。 ;)但我懷疑他們沒有這樣做。 –

回答

0

很確定這樣的事情是你在找什麼。但是,我不認爲你是在這裏實際完成的。我注意到你正在使用IN和標量值。如果這些值包含逗號分隔的列表,這仍然不起作用。

WHERE 
(
    date_shipped = @ShippedDate --This will not be true if @ShippedDate is null 
    OR 
    (
     @ShippedDate is null 
     AND 
     [order].order_date BETWEEN @StartDate AND @EndDate 
    ) 
) 
AND program_types.id IN (@ProgTypes) 
AND employee.id IN (@RepNames) 
ORDER BY OrderID 
+0

如果我添加一個日期,我得到所有記錄如果我添加空我沒有記錄。我尋找的邏輯是,如果有一個值,我得到與該值的記錄如果爲空,那麼它會給其餘的地方。這似乎並不奏效。 –

+0

哎呀....我在第二部分有一個不是空的倒退。並且請記住,你沒有提供太多的細節,所以這裏的每個人都在猜測。 –

+0

它的工作,我是這樣一個白癡,我有date_shipped ship_date。 TY幫助它按預期工作。 GJ。 –