从 sql 中 case 表达式的结果中获取列值

Fetching column values from result of case expression in sql

我有一个 table,包含 PRNumber、PRLevel、Levelstatus 和 TransDate 列
执行了以下case表达式,
第一个案例:

 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,如下所示
第二种情况:

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 具有不同的值。

添加表达式:

( SELECT Traddate FROM tblpr_approvalstatus a2 where a2.prnumber = a1.prnumber and a2.prlevel = case when a1.Levelstatus = 'PUR' 然后 a1.prlevel - 1 结束)作为上一个

注意 - 将 a1 的 table 别名添加到 from 子句中现有的 table。

试试下面的方法,

    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'