我需要编写一个执行此操作的查询:
SELECT TOP 1
FROM a list of tables (Joins, etc)
ORDER BY Column X, Column Y, Column Z
如果ColumnX
为NOT NULL
,那么我现在重新选择,使用略有不同的ORDER BY
。
所以,我做了两次相同的查询。如果第一个在某列中有NULL
,我会从我的程序中返回该行。但是,如果值不是NULL
- 我必须做另一个相同的选择,除了按不同的一两个顺序排序。
我现在所做的是第一次将它选入临时表。然后检查列的值。如果没有问题,则返回临时表,否则,重做select并返回该结果集。
更多详情:
在英语中,我问数据库的问题是:
返回我对某些球场外观的所有结果(通过索引外键)。我希望大约1000行。按出现日期(列,未编入索引,可为空)排序,最后出现。检查'importId'。如果前1行的导入ID不为NULL,那么我们需要运行相同的查询 - 但这次,按导入ID(最后一个)排序,然后返回该行。或者,只返回原始查询的前1行。
答案 0 :(得分:3)
我想说最好的方法是在单个查询是一个CASE
声明......
SELECT TOP 1 FROM ... ORDER BY
(CASE WHEN column1 IS NULL THEN column2 ELSE column1 END)
答案 1 :(得分:1)
您可以使用COALESCE函数将可为空的列转换为有序的友好值。
SELECT CAST(COALESCE(MyColumn, 0) AS money) AS Column1
FROM MyTable
ORDER BY Column1;
答案 2 :(得分:0)
我在Firebird中使用过(列为数字):
ORDER BY CASE <condition> WHEN <value> THEN <column1>*1000 + <column2> ELSE <column3>*1000 + <column4> END