2016-03-06 37 views
0

我想什麼是有一個選擇設置一個稱爲電流場的基於表的值和兩個變量,都聲明爲輸入存儲過程與選擇的值如下:如何根據參數在SELECT中設置字段的值?

DECLARE @AdminTestId INT = 111 
DECLARE @UserTestId INT = null 
AdminTestId  UserTestId  Current 
111        1 
111        1 
222        0 
333        0 

DECLARE @AdminTestId INT = 111 
DECLARE @UserTestId INT = 457 
AdminTestId  UserTestId  Current 
111    456   0 
111    457   1 
123        0 

一些幫助和建議,將不勝感激。

+0

這是非常可行的,但不是很清楚。你能給我們一個基於輸入參數值的樣本數據集和預期輸出。 – Kaf

回答

1

看起來你已經有了一些邏輯,其中當前才應該設置爲1,如果UserTestId爲空或UserTestId列相匹配。你可以在你的SQL查詢中使用case語句,如下所示:

DECLARE @AdminTestId INT = 111 
DECLARE @UserTestId INT = 457 

SELECT 
    AdminTestId, 
    UserTestId 
    CASE 
    WHEN (@AdminTestId IS NULL AND @UserTestId IS NULL) THEN 0 
    WHEN (@AdminTestId = AdminTestId AND @UserTestId = UserTestId) THEN 1 
    WHEN (@AdminTestId = AdminTestId AND @UserTestId IS NULL) THEN 1 
    WHEN (@AdminTestId IS NULL AND @UserTestId = UserTestId) THEN 1 
ELSE 0 
END AS IsCurrent 
+0

非常感謝。只是一個小問題。我想返回一個標題爲Current的值,但這會給出語法錯誤。我想這是一個保留字。有沒有辦法解決這個問題? – Alan2

+1

對於保留字,您可以將它們包裹在方括號中。例如,SELECT something as [current]。 – Mun

1
SELECT 
    ... 
    CAST(CASE 
    WHEN t.AdminTestID = @AdminTestID 
     AND (t.UserTestID = @UserTestID 
     OR @UserTestID is NULL AND t.UserTestID is NULL) 
    THEN 1 
    ELSE 0 
    END as bit) as Current 
FROM ... 
相關問題