如何根据参数设置SELECT中字段的值?

时间:2016-03-06 18:02:51

标签: sql-server

我想要的是有一个SELECT,它根据表的值和两个变量设置一个名为Current的字段的值,这两个变量被声明为存储过程的输入,其中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

一些帮助和建议将不胜感激。

2 个答案:

答案 0 :(得分: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 ...

答案 1 :(得分:1)

如果 UserTestId 为空或与UserTestId列匹配,您似乎有一些逻辑,其中 Current 只应设置为1。您可以在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