如果id = 0,则返回父表中的所有记录

时间:2017-12-07 21:08:15

标签: sql sql-server conditional union

我们假设我有一张表格,指定Users作为部门的经理,例如:

UserManagerTable

ID      UserId    DivisionId
1       23        1
2       45        0

DivisionId = 0表示用户被指定为Divisions表中所有部门的管理员时。

我想知道查询此表以返回DivisionId's的最佳方式,如果DivisionId = 0则返回DivisionIds表中的所有Divisions

SELECT DivisionId FROM UserManagerTable...?

DivisionId
1
1
2
3
...
...
30        

最初,我认为我可以做类似的事情:

SELECT
CASE 
    WHEN DivisionId  = 0 THEN (Select DivisionId FROM Division)
    ELSE DivisionId 
END AS DivisionID
FROM PoAppApprovedRequestor

但那并没有让我得到我想要的东西。

2 个答案:

答案 0 :(得分:2)

你的意思是这样吗?

select d.*
from divisions d
where exists (select 1
              from usermanager um
              where um.id = @id and
                    (um.divisionid = 0 or um.divisionid = d.divisionid)
             );

答案 1 :(得分:0)

您可以使用下面的查询

;with newUserManagerTable as 
(
select ID,UserId,D.DivisionId from
from UserManagerTable U Join Divisions D
  on U.DivisionId=D.DivisionId or U.DivisionId=0
)

--you query here on newUserManagerTable