2018年1月6日 星期六

找出欄位值中最小(大)值

ORACLE直接使用LEAST函數(最小)GREATEST函數(最大)即可MSSQL目前版本尚未提供類似函數,但可用CROSS APPLY/VALUES等組合出所需功能。

ORACLE
MSSQL
資料
CREATE TABLE T
(
ID INT ,
Col1  INT,
COL2  INT,
COL3  INT

INSERT INTO T VALUES(1, 1, 2, 3);
INSERT INTO T VALUES(2, 5, 8, 4);
INSERT INTO T VALUES(3, 7, 2, 6);
CREATE TABLE #T
(
ID INT IDENTITY(1, 1),
Col1  INT,
COL2  INT,
COL3  INT
)  

INSERT INTO #T VALUES(1, 2, 3)
INSERT INTO #T VALUES(5, 8, 4)
INSERT INTO #T VALUES(7, 2, 6)
SQL
SELECT ID, Col1, Col2, Col3
  , LEAST(COL1, COL2, COL3) MinVal
  , GREATEST(COL1, COL2, COL3) MaxVal
FROM T
SELECT ID, Col1, Col2, Col3
     , MinVal
     , MaxVal
FROM #T
CROSS APPLY
  (
   SELECT MIN(d) MinVal
        , MAX(d) MaxVal
   FROM (VALUES (Col1),(Col2),(Col3)) AS a(d)
  ) A
(1). 以VALUES函數,逐筆將Col1~3轉成僅具1個欄位
     (d)的虛擬Table(a),原3個欄位轉成3筆資料。
(2). 再以MIN/MAX函數找出3筆中最小(大)值
     (即原資料中3個欄位中最小(大)值)


沒有留言:

張貼留言