计算最小总值并从表中删除所有其他行

时间:2017-06-16 09:28:16

标签: sql-server

这是我的餐桌。

Table MyTable
-------------
ID  Distance1   Cost1               Distance2   Cost2       Distance3   Cost3
1   711.9       6196.90432379846    NULL        NULL        NULL        NULL
2   672.4       7316.33             NULL        NULL        103.5       900.941 8217.271
3   787.7       8570.9              252         2193.59     NULL        NULL

我想要的是找出总数最少的行(Cost1 + Cost2 + Cost3)。保留该行并删除其他所有内容。

到目前为止,我已经实现了这一目标。这给了我最小总值的行。

select TOP 1 *, ISNULL(Cost1, 0 )+ISNULL(Cost2, 0 )+ISNULL(Cost3, 0 ) as TotalCost from MyTable order by TotalCost

我也想删除其他行。无论如何,我可以在一个声明中做到这一点。

1 个答案:

答案 0 :(得分:1)

使用CTERow_Number窗口功能删除

;with cte as
(
select Row_number()over(order by ISNULL(Cost1, 0)+ISNULL(Cost2, 0 )+ISNULL(Cost3, 0)) rn,* 
from MyTable
)
Delete from cte where rn > 1