我有一个包含PRNumber,PRLevel,Levelstatus和TransDate列的表
执行以下案例表达,
Firstcase:
select PRNumber,PRLevel,Levelstatus,Trasdate,
case when Levelstatus = 'PUR'
then prlevel - 1
end as [PR_level]
from dbo.tblpr_approvalstatus where prnumber = '000005'
PRNumber PRLevel Levelstatus Trasdate PR_Level 000005 1 DM 2015-06-15 10:07:33.467 NULL 000005 2 PRE 2015-06-15 11:09:08.980 NULL 000005 4 IMM 2015-06-19 12:02:56.600 NULL 000005 5 PUR 2015-06-19 14:37:43.650 4 000005 3 FIN 2015-06-18 21:07:57.933 NULL
当Levelstatus等于PUR时,我从case表达式得到PrLevel 5,我想在case表达式中获取前一个PRlevel值的Trasdate,如下所示
Secondcase:
select case when PRlevel = 4
then trasdate
end as [Transaction_date]
from tblpr_approvalstatus where prnumber = '000005'
我希望将第一个案例和第二个案例表达式组合为单个表达式,以在Levelstatus ='PUR'和PRLevel的上一个值时获取Trasdate列值。
PRLevel,Levelstatus和TransDate列对每个PRNumber具有不同的值。
答案 0 :(得分:0)
添加表达式:
(SELECT Trasdate FROM tblpr_approvalstatus a2,其中a2.prnumber = a1.prnumber和a2.prlevel =案例a1.Levelstatus ='PUR' 然后是a1.prlevel - 1 结束)AS prev
注意 - 在from子句的现有表中添加a1的表别名。
答案 1 :(得分:0)
尝试以下内容,
SELECT PRNumber
,PRLevel
,Levelstatus
,Trasdate
,CASE
WHEN Levelstatus='PUR' THEN prlevel- 1
END AS [PR_level]
,(
SELECT Trasdate
FROM tblpr_approvalstatus TAS
WHERE TAS.prnumber = tblpr_approvalstatus.prnumber
AND TAS.prlevel = CASE
WHEN tblpr_approvalstatus.Levelstatus='PUR' THEN
tblpr_approvalstatus.prlevel
- 1
END
) AS Prev
FROM tblpr_approvalstatus
WHERE prnumber = '000005'