假设示例:您有一个名为HOUSES的表,并且您希望按照上次更新的顺序显示每一行。
- 最近的最近,最近的最后一次
- 你也想首先以未售出的方式订购它们,并将所有售出的库存放在最后。
- 管理员还必须能够从未售出更改为已售出,并且将此项更改将项目拖放到底部并且另一个已售出。如果需要,可以手动更改特定房屋的显示顺序。
我该怎么做?这些是我必须使用的专栏:
-ID (which can be used to order them by date added i suppose), -PRICE (vals are: the price if unsold or "SOLD" if sold) -DISP_ORDER (an integer field with the true display order)
答案 0 :(得分: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
值首先跟随最近 - 更改 - 第一个订单中的所有项目。