TSQL:如何更改行位于另一行之前?

时间:2014-02-03 20:56:00

标签: sql-server tsql

我在SQL Server数据库中有这个表(只是表的一个片段,它只显示ID = 290的行):

ID_Mov |TypeRow|CodeArticle      | Description                  | Price
-----------------------------------------------------------------------
 290   | 1     | 00311-CC71671   | Aprilia                      | 100,00
 290   | 8     |                 | this row contain only note   |   0,00
 290   | 1     | APRSV1408-013SU | Air Box                      |   0,00
 290   | 1     | APRSV1408-018SU | Ammortizzatore               |   0,00
 290   | 1     | APRSV1408-1237U | Antenna                      |   0,00

我想将typerow 8之后的行的价格设置为50,并将typerow 8之前的行设置为0。

所以结果必须是:

290 |1 |00311-CC71671  |Aprilia                   |0,00
290 |8 |               |this row contain only note|0,00
290 |1 |APRSV1408-013SU|Air Box                   |50,00
290 |1 |APRSV1408-018SU|Ammortizzatore            |50,00
290 |1 |APRSV1408-1237U|Antenna                   |50,00

1 个答案:

答案 0 :(得分:0)

我假设你的问题不会通过这种方法解决,但是: -

 update this_table set price=50 
 where id_mov=290 and type_row=1 and price=0

 update this_table set price=0 
 where id_mov=290 and type_row=1 and price=100

将产生您要求的结果。

如果您解释了50的新价格是如何得出的,那么可以建议一个更通用的解决方案来处理表中的其他行。

这是一次通过: -

 update this_table set price=case price when 0 then 50 when 100 then 0 end
 where id_mov=290 and type_row=1