我有一个SQL查询的结果,我想按字母顺序排序,但有几个常用的结果,我想浮到顶部。 有没有一种简单的方法可以通过巧妙的SQL或在填充后填充(asp.net)数据表来实现这一目标?
我知道我想提前保留在最顶端的东西的数据库ID,如果这会产生影响。
答案 0 :(得分:10)
最简单的方法是按照将其他字段设置为其他字段的方式进行排序......
假设您有权修改表格的结构(您可能没有),则添加“粘性”字段,允许您将项目标记为粘性,并根据需要将订单附加到粘性项目。在常规排序之前按此字段排序。
至于在没有定义该字段的情况下执行此操作的技巧 - 您需要按照您可以在这些字段中找到的某些数据进行排序,或者将ID保存在单独的表中 - 或查询中的列表...而不是最理想的方式,但它会起作用。
答案 1 :(得分:6)
您可以定义一个自定义列,设置可以排序的“特殊标志”。然后,按字母顺序排序。
SELECT ...
IsSpecial = CASE WHEN RowID IN (100,534,203) THEN 1 ELSE 0 END
FROM ...
ORDER BY IsSpecial DESC, RowID ASC, Name ASC
答案 2 :(得分:5)
通过使用您指定的任何规则的案例陈述进行排序......
...
Order By Case
When [My Rules that designate special]
Then 0 Else 1 End
答案 3 :(得分:4)
您可以添加名为“特殊”的附加字段。特殊的并不一定必须存在于表中,您可以根据自己的需要派生出查询。然后排序如下:
ORDER BY Special DESC, Name ASC
这当然假设您的非特殊行为0,字母字段称为“名称”
答案 4 :(得分:2)
添加到@EndangeredMassa:
如果你已经在做工会,你也可以做类似的事情:
SELECT 0 QueryType, Desc, GrandTotal
FROM YourTable
UNION ALL
SELECT 1 QueryType, Desc, LineItems
FROM YourTable
ORDER BY QueryType, Desc
注意:在这个例子中,联合可能并不理想......这只是一个例子!