0

我想做这样的事情

这行得通 Select ID, number, cost from table order by number

数量可以是 2 倍,但成本和相同

1 A33  66.50

2 A34  73.50

3 A34  73.50

但我想拥有

1 A33  66.50

2 A34  73.50

3 A34  0

我想在 Sql 中将其更改为 0 我尝试过 distinct 或 if then else。

我想做这样的事情

declare @oldcost int;

 Select ID, number, 
    if(cost=@oldcost) then
       cost=0;
    else
       cost=cost;
    end if
    @oldcost=cost;

from table order by number

我怎样才能在 SQL 中做到这一点?

4

1 回答 1

0

您可以使用窗口函数和case表达式:

select ID, number,
       (case when row_number() over (partition by number order by id) = 1
             then cost else 0
        end) as cost
from table
order by number, id;

请注意,SQL 通常不考虑排序,因此可以按任何顺序返回结果——即使使用order by, 具有相同键的行也可以按任何顺序(并且在不同的执行中以不同的顺序)。

因此,order by包含id以及number因此您可以cost在每个“第一”行中获得number.

于 2020-06-08T13:42:39.847 回答