我在Sql server中使用了两个表Offered
和Joined
。
我提供了一个加入公司的候选人..在提供时,我会提到一个加入日期......它将被存储在Offered
表中,不在Joined
表..
候选人可以加入不同的日期..加入日期将存储在Joined
表中..这不应在Offered
表中更新..
现在我正在创建一个结合Offered and Joined Report
的报告。在那里,我有一个名为Date of Joining
的列。在该列中,日期将来自{{1如果候选人尚未加入,则表格如果候选人加入意味着,日期将来自Offered
表..要在表格之间进行选择,我使用了函数..
Joined
我保存了这个函数并在select语句中调用了函数..
现在我的问题是,我想根据加入日期条件创建报告。为此,begin
declare @chk int
declare @JoiningDate datetime
set @chk=0
select @chk=id from MemberJoiningDetails where JobPostingId=@JobPostingId and MemberId=@MemberId
if(@chk != 0)
begin
select @JoiningDate=JoiningDate from MemberJoiningDetails where JobPostingId=@JobPostingId and MemberId=@MemberId
end
else
begin
select @JoiningDate=JoiningDate from MemberHiringDetails where JobPostingId=@JobPostingId and MemberId=@MemberId
end
return @JoiningDate
end
条件从C#传递..
但我怀疑的是,如果候选人尚未加入,那么where条件应该从WHERE
表中检查..如果候选人加入我,那么where条件应该从Offered
表检查。怎么做...?
答案 0 :(得分:1)
而不是检查一个是否为空,你应该放入COALESCE
函数。在功能内部,您只需先选择租用日期,如果为空,则返回加入日期。这样你就不必担心他们是否被录用了。如果我正确地读表,查询将如下。
SELECT @JoiningDate = COALESCE(h.JoiningDate, j.JoiningDate)
FROM MemberJoiningDetails AS j
LEFT OUTER JOIN MemberHiringDetails AS h
ON j.JobPostingId = h.JobPostingId
AND j.MemberId = h.MemberId
WHERE j.JobPostingId = @JobPostingId
AND j.MemberId = @MemberId