这是我的餐桌。
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
我也想删除其他行。无论如何,我可以在一个声明中做到这一点。
答案 0 :(得分:1)
使用CTE
和Row_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