我被困在用其他语言可以做的事情上,所以我希望有人能帮我,我有两个表,一个是我的预算编号,其余的每个命令都是另一个表,这里有我的员工实际值--这是我试图做的事情的一个例子:
表A
Command Number Remainig Work
PO1111 3
PO1112 10
表B
Command Number: Actuals: Name Date
PO1111 1 A 11/06
PO1111 1 A 11/07
PO1111 1 B 11/06
PO1111 1 B 11/07
PO1111 1 B 11/08
PO1111 1 B 11/10
PO1111 1 B 11/11
PO1112 1 A 11/09
PO1112 1 A 11/10
所以最后我想要的是:
Date Worker Actuals
11/06 A 1
11/07 A 1
11/06 B 1
11/07 B Error
11/08 B Error
11/10 B Error
11/11 B Error
11/09 A 1
11/10 A 1
命令号
剩余预算:32小时
工人A工作40h,工人B 16h,所以我想得到这样的结果:对于工人A:
Day: Hours:
1 8
2 8
3 8
4 8
5 ERROR
对于工人B:
Day Hours
1 ERROR
2 ERROR
所以我想我应该花点时间做点什么,但我不知道如何用我的实际值减去以前的值,如果有人能帮我的话
谢谢你的帮忙
发布于 2018-11-12 07:09:47
可以使用由CommandNumber
使用rows unbounded preceding
分区的窗口函数rows unbounded preceding
。
declare @A Table (CommandNumber varchar(100), RemainigWork integer)
declare @B Table (CommandNumber varchar(100), Actuals integer, Name varchar(100))
INSERT INTO @A(CommandNumber, RemainigWork) values('PO1111', 3)
INSERT INTO @b(CommandNumber, Actuals, Name) values('PO1111', 1, 'A')
INSERT INTO @b(CommandNumber, Actuals, Name) values('PO1111', 1, 'A')
INSERT INTO @b(CommandNumber, Actuals, Name) values('PO1111', 1, 'B')
INSERT INTO @b(CommandNumber, Actuals, Name) values('PO1111', 1, 'B')
INSERT INTO @b(CommandNumber, Actuals, Name) values('PO1111', 1, 'B')
select
a.CommandNumber,
case when sum(Actuals) over (partition by a.CommandNumber order by b.name rows unbounded preceding) > RemainigWork
then
'Error'
else
CAST(Actuals as varchar(100))
end as Actuals,
b.Name
from @A a
join @B b on a.CommandNumber = b.CommandNumber
https://stackoverflow.com/questions/53264284
复制