Sql server 2012 如何根据SQL中另一个表列中的值选择位

Sql server 2012 如何根据SQL中另一个表列中的值选择位,sql-server-2012,Sql Server 2012,我想做的是使用一个SELECT语句并选择两列,其中一列是根据联接表列值生成的位 SELECT [User].Id, 0 --this bit must change depending on Rule.Id FROM [dbo].[User] User INNER JOIN [dbo].[Rule] Rule ON [Rule].Id = 8 WHERE [User].UserId = @userId AND [User].ShopId = @shopId 因此,如果Rule.Id=8,则该

我想做的是使用一个SELECT语句并选择两列,其中一列是根据联接表列值生成的位

SELECT [User].Id, 0 --this bit must change depending on Rule.Id 
FROM [dbo].[User] User
INNER JOIN [dbo].[Rule] Rule
ON [Rule].Id = 8
WHERE [User].UserId = @userId
AND [User].ShopId = @shopId
因此,如果Rule.Id=8,则该位必须为1 如果Rule.Id=5,则位为0,否则位为0

SELECT [User].Id,case when  Rule.Id = 8 then 1 when  Rule.Id = 5 then 0 else 0 end  as bit
FROM [dbo].[User] User
INNER JOIN [dbo].[Rule] Rule
ON [Rule].Id = 8
WHERE [User].UserId = @userId
AND [User].ShopId = @shopId

如果您使用的是SQL Server,则可以使用CASE函数


用mysql标记。是否确定?请从my_表中选择rule.id=8 my_位。它表示无法绑定多部分标识符。谢谢,编辑了原始postwhy join on the rule?因为查询需要rules.id。
SELECT [User].Id, Case Rule.id when 8 Then 1 Else 0 End as MyBit FROM [dbo].[User] User INNER JOIN  dbo].[Rule] Rule ON [Rule].Id = 8 WHERE [User].UserId = @userId AND [User].ShopId = @shopId