如何让T-SQL查询为每个SkillId额外返回CandidateId为Null的行?
解决方案:为每个SkillId添加CandidateId为Null的额外记录
当然可行!你可以通过UNION ALL将原查询的结果,与每个SkillId对应的空CandidateId记录合并,就能实现需求。修改后的T-SQL语句如下:
-- 原查询结果:保留所有已有关联的记录 SELECT NEWID() as Id, ss.Id as SkillId, ss.Name, sc.Vote, sc.CandidateId, sc.Id As ScoreId FROM dbo.SoftSkills ss LEFT JOIN dbo.Scorecards sc ON ss.Id = sc.SkillId UNION ALL -- 新增部分:为每个SkillId生成一行CandidateId为Null的记录 SELECT NEWID() as Id, ss.Id as SkillId, ss.Name, NULL as Vote, -- 对应原查询中sc.Vote的空值 NULL as CandidateId, -- 目标空值字段 NULL as ScoreId -- 对应原查询中sc.Id的空值 FROM dbo.SoftSkills ss
补充说明:
- 用
UNION ALL而非UNION是因为我们就是要额外新增一行记录,不需要去重,这样执行效率也更高 - 第二部分查询仅从
SoftSkills表取基础数据,把来自Scorecards表的字段统一设为NULL,保证和原查询的字段结构完全匹配 - 如果希望同一个SkillId的所有记录排在一起,可以在整个语句末尾加上
ORDER BY SkillId
内容的提问来源于stack exchange,提问作者AdMer
相关产品推荐
相关产品推荐

