【发布时间】:2019-03-01 10:30:31
【问题描述】:
我有一张下表,其中有员工的交易,其中工资代码为“S”:
Id | Code | Amount | Date
1 | B | 40 | 2017-01-01
1 | S | 45000 | 2017-01-02
1 | D | 30000 | 2017-01-15
1 | B | 15000 | 2017-01-20
1 | S | 45000 | 2017-02-02
1 | B | -20000 | 2017-02-04
1 | B | -10000 | 2017-02-05
我的目标是查看员工需要多少天才能耗尽所有工资
这是我想要的输出:
Id | Code | Amount | Month | # days when all salary drains
1 | S | 45000 | 01 | 20
1 | S | 45000 | 01 | 0
我已关注this 并尝试了以下 SQL 查询:
with cte as
(
select *,
--CASE WHEN Transaction_Code in ('521', '522') then Transaction_Amt else null end as Last_V_ID
-- find the latest 'V' ID per ArtNo
max(case when Transaction_Code in ('521', '522') then Transaction_Amt end)
over (partition by INTERNAL_ACCT_NUM order by value_date) as Last_V_ID
from [10.16.42.25].[Cross_Sell_PL].[dbo].[PL_NONPL_TRANS]
WHERE INTERNAL_ACCT_NUM = '0103PBS8T6001'
--order by value_date
)
select *,
case when Transaction_Code in ('521', '522') then Transaction_Amt else
( lag(Last_V_ID,1,0) OVER (PARTITION BY INTERNAL_ACCT_NUM ORDER BY VALUE_DATE) )
+ Transaction_Amt end as running_balance,
sum(case when Transaction_Amt < Last_V_ID then null else Transaction_Amt end)
over (partition by INTERNAL_ACCT_NUM order by VALUE_DATE rows unbounded preceding)
from cte
order by Internal_Acct_num, value_date
问题是我无法限制代码之间的计算,也无法计算天数。
【问题讨论】:
-
日期计算的逻辑是什么
-
我已经编辑了代码
-
@user1584253 。 . .不知怎的,我怀疑代码和你要做什么有关,但是数据没有描述,计算不清楚。
-
您的代码似乎与问题无关。它使用
Transaction_Code,这在您上面引用的示例中没有。您想要的输出也是错误的。第二行似乎与第二个月有关,但是,您将其列为 01 月。第二行的天数是因为工资还没有用完吗?最后,我希望这是某种家庭作业,因为如果您深入了解员工的消费模式,我肯定不想为您工作 ;-)
标签: sql sql-server cumulative-sum