如何使用sql case语句重新创建此逻辑

时间:2014-04-07 15:52:31

标签: sql sql-server

SELECT

    'IsActive' = 

FROM Users u
    INNER JOIN Permissions p ON u.Id = p.UserId

我需要在上面的查询中添加一些逻辑来获得与我在下面做的相同的结果(这是伪代码)。

这是否可以使用案例陈述?

if( 
    (p.Approved && 
        (p.secondaryApproval == null ||  (p.SecondaryApproval != null && p.secondaryApproval)
    )
  )

上面if语句中的逻辑确定为IsActive应为真。

我可以在查询中以某种方式使用sql case语句来mimick这个逻辑吗?

2 个答案:

答案 0 :(得分:3)

像这样:

SELECT
    CASE
        WHEN p.Approved=1 AND (p.SecondaryApproval IS NULL OR p.SecondaryApproval=1) THEN 1
        ELSE 0
    END AS IsActive
FROM Users u
    INNER JOIN Permissions p ON u.Id = p.UserId

请注意,没有必要在p.SecondaryApproval的另一端测试OR非空值,无论是在SQL还是在C#代码中。

答案 1 :(得分:0)

试试这个,

SELECT *  FROM Users u
    INNER JOIN Permissions p ON u.Id = p.UserId
Where p.Approved = true
and (
    p.secondaryApproval is null
    OR
    (p.SecondaryApproval is not null and p.secondaryApproval = true)
    )