我有一个包含以下列的表: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 ......
你可以尝试类似的东西
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)
| 归档时间: |
|
| 查看次数: |
189308 次 |
| 最近记录: |