从 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'
我有一个 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'