2014-02-10 25 views
0

确定我的头可能使这种声音很确实简单,但我也有情况是这样的:我怎样才能在第一所需行之前删除数据选择的

我需要得到所有实践的一年中每一周成本为0,然后更新到插入这些实践的表变量。见的代码和示例如下片段: - 54

这是数据

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我只是不能把这些都放在这里,而且有很多不同的参赛项目,不仅仅是这些参赛项目,所以例如练习110可能会在第3,7,12和17周等有些费用。我需要什么要做的是从这个表中删除变量或临时表tabl我不介意在列表中的第一个实际值条目之前的零成本条目。

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

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

我认为这将是简单的,但我的想法已经试图解决这个问题。

回答

1

为什么你不把它们摆在首位呢?做这样的事情:

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

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

+0

我已经使用了交叉连接来创建一个针对每种练习的0费用列表,以便我可以用相应的数字更新所需的费用。这是我能够获得所有财政周数的唯一方式,否则任何其他加入(左,右,满等)只会返回有成本的实际财政周。 我不需要在插入的顺序,你在那里是正确的。通过选择所有成本大于0的地方,我们将会在具有实际数字的星期之间失去零条目。 – user3111531

相关问题