我有下表:
+----+----------+-----+-----------+----------+
| 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
答案 0 :(得分:3)
由于Access不支持CASE ... WHEN,您有两种方法可以获得自定义排序顺序。
1)如果可以编辑数据库结构,请在表中添加“SortOrder”列。
假设“地址”字段在“CUSTOMERS”表中具有唯一值,则在“CUSTOMERS”表中创建一个名为“SortOrder”的字段,为“Delhi”指定“1”,为“Bhopal”指定“2”,等等:
SELECT *
FROM CUSTOMERS
ORDER BY CUSTOMERS.SortOrder DESC;
但是,如果可能在“CUSTOMERS”表中多次出现相同的“Address”值,则应创建一个新的表,如“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()函数。
答案 1 :(得分:3)
CASE
。您可以改为使用Switch()
。
答案 2 :(得分:-2)
请访问以上链接,您将获得解决方案