Sql server 使用case时如何更改列名?SQL Server查询
我尝试使用case语句在一行中获取结果,它显示的是正确的结果,但在两行中,让我显示我的查询Sql server 使用case时如何更改列名?SQL Server查询,sql-server,tsql,sql-server-2012,case,Sql Server,Tsql,Sql Server 2012,Case,我尝试使用case语句在一行中获取结果,它显示的是正确的结果,但在两行中,让我显示我的查询 select v.Id, v.VisitNumber, v.EndTime as VisitEndTime, case when srh.ReviewerRole = 2 then srh.CreatedOn end as TeamLeaderApproval, case when srh.ReviewerRole = 4 then srh.CreatedOn
select
v.Id,
v.VisitNumber,
v.EndTime as VisitEndTime,
case when srh.ReviewerRole = 2 then srh.CreatedOn end as TeamLeaderApproval,
case when srh.ReviewerRole = 4 then srh.CreatedOn end as ProgramManagerApproval
from
visit v
inner join
SurveyReviewHistory srh on v.Id = srh.VisitId
where
v.Status = 5
and v.Id = 5957
它以这种格式向我显示结果
Id VisitNumber VisitEndTime TeamLeaderApproval ProgramManagerApproval
5957 Visit_U_6 2019-05-26 2019-05-26 NULL
5957 Visit_U_6 2019-05-26 NULL 2019-05-26
如果Reviewrole 2在团队领导列中显示createdon时间,或者如果review role 4在program manager列中显示createdon时间,我希望在一行中获得结果
希望你的建议
谢谢一种方法是使用条件聚合:
select v.Id,
v.VisitNumber,
v.EndTime as VisitEndTime,
max(case when srh.ReviewerRole = 2 then srh.CreatedOn end) as TeamLeaderApproval,
max(case when srh.ReviewerRole = 4 then srh.CreatedOn end) as ProgramManagerApproval
from visit v
inner join SurveyReviewHistory srh
on v.Id = srh.VisitId
where v.Status = 5
and v.Id = 5957
group by v.Id, v.VisitNumber, v.EndTime
这个想法很简单——您可以根据原始查询中给出相同结果的所有列进行分组。然后,使用
max
获取大小写表达式的值
,因为在两个值之间使用max
,其中一个值为null
,另一个值将是由max
聚合函数选择的值。您可以尝试以下操作:
SELECT DISTINCT K.Id,
K.VisitNumber,
K.VisitEndTime,
FIRST_VALUE(K.TeamLeaderApproval) OVER(PARTITION BY K.Id,K.VisitNumber, K.VisitEndTime ORDER BY K.TeamLeaderApproval DESC) AS TeamLeaderApproval,
FIRST_VALUE(K.ProgramManagerApproval) OVER(PARTITION BY K.Id,K.VisitNumber, K.VisitEndTime ORDER BY K.ProgramManagerApproval DESC) AS ProgramManagerApproval
From (
select
v.Id,
v.VisitNumber,
v.EndTime as VisitEndTime,
case when srh.ReviewerRole = 2 then srh.CreatedOn end as TeamLeaderApproval,
case when srh.ReviewerRole = 4 then srh.CreatedOn end as ProgramManagerApproval
from visit v
inner join
SurveyReviewHistory srh on v.Id = srh.VisitId
where
v.Status = 5 and v.Id = 5957
) as K
是的,它可以工作,但是你能解释一下查询中的最大行数吗?当然,我已经在我的答案中添加了一些解释。@Doc如果我的解决方案如你所料有效,请不要忘记向上投票并将其标记为答案。谢谢我尝试了你的解决方案这里面有错误query@Doc请分享错误信息,以便我可以帮助您解决此问题。我根据我表格的列编辑了您的答案。现在,它工作正常。审查角色不具备产生预期结果的条件。嗯,我正在使用zohar解决方案。@Doc由于您是Stackoverflow新手,我需要说的是,如果您发现zohar的答案是您正在寻找的解决方案,那么您应该将其标记为答案,但是您可以对任何其他正确答案进行投票,但不能对您正在寻找的答案进行投票。