我坚持使用其他语言可以做的事情,所以我希望有人可以帮助我 我有两张桌子,一张是我的预算号,另一张是每个命令的剩余预算 我的工人实际情况的另一张桌子 这是我要执行的操作的示例:
表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工作40小时,工人B工作16小时 所以我想得到这样的结果: 对于工人A:
Day: Hours:
1 8
2 8
3 8
4 8
5 ERROR
对于工人B:
Day Hours
1 ERROR
2 ERROR
所以我想我应该花点时间做些事情,但是我不知道如何用我的实际值减去先前的值 所以有人可以帮助我
感谢您的帮助
答案 0 :(得分:0)
您可以使用由sum
划分为CommandNumber
的窗口功能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