这是我要解决的情况:
我有一个查询,可以返回一组记录。排序依据的字段可以有许多不同的值-出于这个问题的考虑,我们将说该值可以是A,B,C,D,E或Z
现在,根据查询的结果,排序的行为如下:如果仅找到AE记录,则可以“自然”地对其进行排序。但是,如果结果中有Z记录,则它必须是查询中的第一个结果,但其余记录应采用“自然”排序顺序。
例如,如果找到了ACD,则结果应为
A C D
但是,如果找到了ABDEZ,则应对结果进行排序:
Z A B D E
当前,查询看起来像:
SELECT NAME, SOME_OTHER_FIELDS FROM TABLE ORDER BY NAME
我知道我可以编写一个排序函数来执行我想要的操作,但是由于我使用结果的方式,我似乎无法使用,因为结果是由第三方库处理的,我只是将其传递给SQL查询。然后,它正在处理结果,似乎没有钩子可以将结果排序并将其传递给库。它需要自己执行SQL查询,并且我无权访问该库的源代码。
因此,对于您在那里的所有SQL专家,您能否为我提供一个查询,该查询将满足我的要求?
您如何识别Z记录?是什么让它与众不同?了解这一点后,将其添加到您的ORDER BY子句中。
SELECT name, * FROM [table] WHERE (x) ORDER BY ( CASE WHEN (record matches Z) THEN 0 ELSE 1 END ), name
这样,只有Z记录将与第一顺序匹配,而所有其他记录将通过第二顺序排序(名称)进行排序。如果您确实不需要二阶排序,则可以将其排除。
例如,如果Z是字符串“ Bob”,则您的查询可能是:
SELECT name, * FROM [table] WHERE (x) ORDER BY ( CASE WHEN name='Bob' THEN 0 ELSE 1 END ), name
我的示例是针对T-SQL的,因为您没有提到正在使用哪个数据库。