gpt4 book ai didi

sql - 使用 SQL 按案例排序

转载 作者:行者123 更新时间:2023-12-04 22:41:12 25 4
gpt4 key购买 nike

我有下表:

+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
+----+----------+-----+-----------+----------+

并且,我正在使用以下查询按照我的首选顺序对表进行排序,但我收到以下 SQL 错误:

CURSOR OPERATION CONFLICT

我的查询:

SELECT * FROM CUSTOMERS ORDER BY (CASE ADDRESS WHEN 'DELHI'   THEN 1
WHEN 'BHOPAL' THEN 2
WHEN 'KOTA' THEN 3
WHEN 'AHMADABAD' THEN 4
WHEN 'MP' THEN 5
ELSE 100 END) ASC, ADDRESS DESC

最佳答案

由于 Access 不支持 CASE...WHEN,您有两种选择来获取自定义排序顺序。

1) 如果您可以编辑数据库结构,请将“SortOrder”列添加到表中。

假设“Address”字段在“CUSTOMERS”表中具有唯一值,在“CUSTOMERS”表中创建一个名为“SortOrder”的字段,指定“1”代表“Delhi”,“2”代表“Bhopal”,等等:

SELECT *
FROM CUSTOMERS
ORDER BY CUSTOMERS.SortOrder DESC;

但是,如果同一个“Address”值可能在“CUSTOMERS”表中出现多次,您应该创建一个新表,如“ADDRESSES”,其中包含 Address 和 SortOrder 值。SQL 最终会看起来像这样:

SELECT CUSTOMERS.* 
FROM CUSTOMERS INNER JOIN ADDRESSES ON CUSTOMERS.Address = ADDRESSES.Address
ORDER BY ADDRESSES.SortOrder DESC;

2) 或者,如果您不能编辑数据库结构,请在 ORDER BY 子句中使用 IIf() 函数:

SELECT *
FROM CUSTOMERS
ORDER BY IIf([ADDRESS] = 'DELHI',1,IIf([ADDRESS] = 'BHOPAL',2,
IIf([ADDRESS] = 'KOTA',3,IIf([ADDRESS] = 'AHMADABAD',4,
IIf([ADDRESS] = 'MP',5,6))))) DESC;

你应该避免这样做,除非你不能编辑数据库结构,因为函数调用很慢,尤其是当像本例那样评估多个条件时。如果您需要为“ADDRESS”字段指定任何额外的排序,您将需要添加额外的 IIf() 函数,这将进一步减慢速度。

如果您能够为“ADDRESS”的每个值指定排序顺序,您应该使用单个 Switch() 函数而不是嵌套的 IIf() 函数。

关于sql - 使用 SQL 按案例排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23778763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com