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

时间:2015-11-16 10:43:39

标签: sql sql-server sql-server-2005

我有一个包含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具有不同的值。

2 个答案:

答案 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'