好的,我的头可能会让这听起来非常简单,但我的场景是这样的:
我需要获取一年中每周的所有实践,成本为0,然后更新插入这些实践的表变量。请看下面的代码片段和示例:
这是数据的主插入
insert into @Weeks
select [practice id], name, description, fiscalweek, 0 as cost from dbo.Main
cross join dbo.Time
where Main.[Practice id] IN (110,109,2,3,4,5,6,7,8)
AND Main.[TreatmentSchemeDescription] IN ('Access+','Access +')
group by [practice id], name, description, fiscalweek
order by [practice id]它会产生类似如下的数据
practice id fiscalweek cost
109 16 0.00
109 17 0.00
109 18 258.00
109 19 0.00
109 20 0.00
109 21 80.00
109 22 0.00
109 23 0.00
109 24 0.00
109 25 0.00
109 26 0.00
109 27 0.00
109 28 0.00
109 29 0.00
109 30 0.00
109 31 0.00现在,fiscalweek计数从1到54,我只是不能证明将它们都放在这里是合理的,并且有许多不同周的条目,而不仅仅是这里的那些,所以例如,练习110可能在第3周、第7周、第12周和第17周等等。我需要做的是从这个表变量或临时表中删除我不介意的工作,在列表中第一个实际值条目之前的零成本条目。
因此,例如,如果practice 110在第2周具有第一个非零成本,则删除第1周的行,但如果practice 109在第18周具有其第一个实际非零成本,则删除第18周之前的所有零条目。但我不想删除具有成本的周之间的零成本行。基本上,这是因为我可以在几周内运行一个实践的成本的平均值,这些成本来自他们的第一个非零成本。
如果所有实践在同一周内都有成本,并且如果我不关心中间的零成本,这将是简单的,但我需要保留这些中间的成本。
我以为这会很简单,但我的大脑一直在努力解决这个问题。
发布于 2014-02-11 00:21:42
为什么你不干脆不把它们放在第一位。这样做:
select *
from
(your existing query goes here) temp
where cost > 0此外,insert查询中的order by子句可能也不是必需的。
https://stackoverflow.com/questions/21682305
复制相似问题