如何根据列值选择true/false?

Yas*_*ine 50 sql-server

我有一个包含以下列的表:EntityId,EntityName,EntityProfile,.................

我想根据实体配置文件的值选择Id和Name以及true/false列,例如,返回的结果集如下所示,意味着实体1和2具有配置文件而3则不具有配置文件.

1 Name1 True
2 Name2 True
3 Name3 False
etc.....
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用一个基于配置文件值返回true/false的函数来完成它,如下所示:SELECT EntityId,EntityName,dbo.EntityHasProfile(EntityId)AS HasProfile FROM Entities

但是我要回来了.记录和用这个函数调用每条记录,查询非常慢,当我删除函数调用时,查询执行时间明显下降.

那么还有另一种方法吗?谢谢

fro*_*die 105

用一个CASE.我会发布特定代码,但需要比帖子中提供的更多信息 - 例如EntityProfile的数据类型以及通常存储在其中的内容.就像是:

CASE WHEN EntityProfile IS NULL THEN 'False' ELSE 'True' END
Run Code Online (Sandbox Code Playgroud)

编辑 - 整个SELECT语句,根据注释中的信息:

SELECT EntityID, EntityName, 
       CASE WHEN EntityProfile IS NULL THEN 'False' ELSE 'True' END AS HasProfile
FROM Entity
Run Code Online (Sandbox Code Playgroud)

在这种情况下,不需要LEFT JOIN ......

  • 要扩展此答案,将返回True或False的sting.它完全满足OP,但作为实际位T/F字段可能更有用(如Kopika所述).我会使用这个case语句:SELECT EntityID,EntityName,cast(CASE WHEN EntityProfile IS NULL THEN 0 ELSE 1 END)as bit)AS HasProfile FROM Entity (4认同)
  • @Rob 谢谢。但是括号打开一次,关闭两次? (2认同)

Adr*_*der 7

你可以尝试类似的东西

SELECT  e.EntityId, 
        e.EntityName, 
        CASE 
            WHEN ep.EntityId IS NULL THEN 'False' 
            ELSE 'TRUE' 
        END AS HasProfile 
FROM    Entities e LEFT JOIN 
        EntityProfiles ep ON e.EntityID = ep.EntityID
Run Code Online (Sandbox Code Playgroud)

要么

SELECT e.EntityId, 
        e.EntityName, 
        CASE 
            WHEN e.EntityProfile IS NULL THEN 'False' 
            ELSE 'TRUE' 
        END AS HasProfile 

FROM    Entities e
Run Code Online (Sandbox Code Playgroud)


小智 6

也许为时已晚,但我会将 0/1 转换为位,以使数据类型最终在 .NET 框架使用时变为 True/False:

SELECT   EntityId, 
         EntityName, 
         CASE 
            WHEN EntityProfileIs IS NULL 
            THEN CAST(0 as bit) 
            ELSE CAST(1 as bit) END AS HasProfile
FROM      Entities
LEFT JOIN EntityProfiles ON EntityProfiles.EntityId = Entities.EntityId`
Run Code Online (Sandbox Code Playgroud)

  • @adrenalin 在“SqlServer”中没有“boolean”数据类型。我们使用“BIT”数据类型来表示布尔数据。“BIT”字段的值可以是“1”、“0”或*“null”(*如果允许的话)。 (2认同)