2016-03-06 42 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 ... 
相关问题