如何在第一个必需行之前删除选择的数据

时间:2014-02-10 16:15:54

标签: sql

确定我的标题可能会让这个声音变得非常简单,但我所拥有的场景是:

我需要获得一年中每周的所有练习,费用为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

现在财政周的计数从1到54不等,我无法证明将它们全部放在这里并且有许多不同周的条目实践,而不仅仅是这些,所以例如练习110可能在几周内有成本3,7,12和17等。我需要做的是从这个表变量或临时表中删除哪些工作我不介意,列表中第一个实际值输入之前的零成本条目。

因此,例如,如果练习110在第2周具有其第一个非零成本,则删除第1周的行,但是如果练习109在第18周具有其第一个实际的非零成本,则在周之前删除所有零个条目18.但我不想删除有成本的周数之间的零成本行。基本上这是因为我可以在几周内平均花费成本来实践从他们拥有的第一个非零成本中获得成本。

如果所有实践在同一周内都有成本,如果我不关心中间的零成本,那么这将是直截了当的,但我需要保留介于两者之间的成本。

我认为这很简单,但我的思绪已经试图解决这个问题。

1 个答案:

答案 0 :(得分:1)

为什么你不首先把它们放在那里。做这样的事情:

select * 
from 
(your existing query goes here) temp
where cost > 0

此外,插入查询中的order by子句可能不是必需的。