1

假设示例:您有一个名为 HOUSES 的表,并且您希望按最后更新的顺序显示每一行。
- 最近的在前,最近的在后。
-您还想先订购未售出的,最后订购所有已售出的库存。

- 管理员还必须能够将未售出的更改为已售出,并让该更改将一件物品放到底部,而另一件已售出。如果需要,可以手动更改特定房屋的显示顺序。

我该怎么做?这些是我必须使用的列:

  -ID(我想可以用来按添加日期订购它们),
  -PRICE(vals 是:未售出的价格或已售出的“已售出”)
  -DISP_ORDER(具有真实显示顺序的整数字段)
4

1 回答 1

0

尝试以下操作:

SELECT * FROM (
    SELECT
        ID, PRICE, DISP_ORDER,
        CASE WHEN PRICE = 'SOLD' THEN 1 ELSE 0 END AS soldOrder,
        CASE WHEN DISP_ORDER > 0 THEN DISP_ORDER ELSE -ID END AS customOrder
    FROM HOUSES
) AS q
ORDER BY
   soldOrder, customOrder

内部查询构建两个自定义排序列。soldOrder将使所有已售商品值为 1,所有未售商品值为 0。如果设置了该值,则该customOrder列将使用该DISP_ORDER值,否则将使用该值-ID(以获取“按降序创建的日期”实现)。
外部查询将选择所有字段并sortOrder首先排序(将所有未售出的商品放在顶部,已售出在底部),然后按照它们的customOrder值对两半中的每一半进行排序(DISP_ORDER首先是值,然后是最近的所有商品-更改优先顺序)。

于 2012-08-07T18:39:17.613 回答