1. 程式人生 > >Oracle 自定義排序方式

Oracle 自定義排序方式

-- Start

首先準備下面的測試資料。

CREATE TABLE price
(
    id              NUMBER(10, 0),
	price_source    VARCHAR(10),
	price           NUMBER(30, 6),
	enter_date_time TIMESTAMP
);
INSERT INTO price VALUES (1, 'NYSE', 8.88, TIMESTAMP '2015-02-12 10:00:00.000');
INSERT INTO price VALUES (1, 'NASDAQ', 8.89, TIMESTAMP '2015-02-12 09:00:00.000');
INSERT INTO price VALUES (1, 'LSE', 8.90, TIMESTAMP '2015-02-12 13:00:00.000');

對於一支股票,不同的交易所提供的價格稍有差異,假設現在讓我們查詢一下某隻股票的價格,如果紐交所(NYSE)提供了價格,則以它的為準,否則取最新的價格。該怎麼排序呢?按照 price_source 排序?顯然不對。答案是建立比較列。
SELECT price FROM (
  SELECT
    price,
    CASE price_source WHEN 'NYSE' THEN 1 ELSE 0 END AS ORDER_COL
  FROM
    price
  WHERE 
    id = 1
  ORDER BY
    ORDER_COL DESC,
    enter_date_time DESC
) WHERE ROWNUM = 1;

或者直接在排序中使用 CASE WHEN.
SELECT price FROM (
  SELECT
    price
  FROM
    price
  WHERE 
    id = 1
  ORDER BY
    CASE price_source WHEN 'NYSE' THEN 1 ELSE 0 END DESC,
    enter_date_time DESC
) WHERE ROWNUM = 1;

-- 宣告:轉載請註明出處

-- Last edited on 2015-02-12

-- Created by ShangBo on 2015-02-12

-- End