【发布时间】:2022-01-27 10:37:57
【问题描述】:
我的 SQL Server 表是这样的
ID a_Toyota a_Mazda a_Nissan a_Kia a_Honda a_Subaru SoldCar CarOrder
1 8000 7000 6200 8500 6500 7000 Mazda NULL
2 4000 5000 4500 3500 3500 5000 Mazda NULL
3 5400 5000 4500 5500 5500 4600 Mazda NULL
4 5600 6300 7500 8200 6500 7300 Mazda NULL
5 8500 7400 7400 6500 9500 9000 Mazda NULL
6 9900 8000 9900 7300 8100 8000 Mazda NULL
我想更新 CarOrder 字段,因此它具有已售汽车价格与其他汽车价格相比的顺序。
所以对于 ID 1 的汽车价格订购为 a_Kia (8500) 是 1st 而 a_Toyota (8000) 是 2nd strong>和a_Mazda & a_Subaru (7000)是第3和a_Honda (6500)是第5和 a_Nissan (6200) 第六 卖的车是马自达,排在第三位,所以表格如下
ID a_Toyota a_Mazda a_Nissan a_Kia a_Honda a_Subaru SoldCar CarOrder
1 8000 7000 6200 8500 6500 7000 Mazda 3
2 4000 5000 4500 3500 3500 5000 Subaru 1
3 5400 5000 4500 5500 5500 4600 Toyota 3
4 5600 6300 7500 8200 6500 7300 Honda 4
5 8500 7400 7400 6500 9500 9000 Honda 1
6 9900 8000 9900 7300 8100 8000 Honda 3
我可以找到带有大 CASE 语句的订单
UPDATE mytable
SET CarOrder =
CASE WHEN SoldCar = 'Toyota' AND a_Toyota>=a_Mazda AND a_Toyota>=a_Nissan AND ... AND a_Toyota>=a_Subaru THEN 1
CASE WHEN SoldCar = 'Toyota' AND a_Toyota<a_Mazda AND a_Toyota>=a_Nissan AND ... AND a_Toyota>=a_Subaru THEN 2
CASE WHEN SoldCar = 'Toyota' AND a_Toyota>=a_Mazda AND a_Toyota<a_Nissan AND ... AND a_Toyota>=a_Subaru THEN 2
.
.
.
CASE WHEN SoldCar = 'Toyota' AND a_Toyota>=a_Mazda AND a_Toyota>=a_Nissan AND ... AND a_Toyota<a_Subaru THEN 2
.
.
.
CASE WHEN SoldCar = 'Toyota' AND a_Toyota<a_Mazda AND a_Toyota<a_Nissan AND ... AND a_Toyota>=a_Subaru THEN 3
..
..
..
但这将是一个巨大的案例陈述。
我想知道是否有人有更简单的方法来做到这一点?
【问题讨论】:
-
仅供参考
case是一个表达式而不是一个语句。 -
@DaleK 感谢您的澄清
-
老实说,您的设计似乎是非规范化的。我怀疑你应该有 2 个表,而不是 1 个,并且每个
ID应该有很多行(每个制作 1 个)。 -
我不太符合你的逻辑,但你也许可以使用
row_number()窗口函数来进行订购。 -
您的表严重非规范化。我建议您在继续之前先整理好设计,否则您将在每次查询时都束手无策
标签: sql sql-server tsql