Re: [SQL ] 問一個排序的問題
: T1
: ID(PK) Value1 Value2
: ----------------------
: 251 AAA 111
: 252 BBB 333
: 253 AAA [null]
: 254 BBB 222
: 255 AAA 000
: 256 CCC 222
: 257 CCC [null]
: 希望能產出下面的報表 Value1為UNIQUE
: Value1 Value2
: --------------
: AAA 000
: BBB 333
: CCC [null]
: Value2的規則是 000 > 333 > [null] > 222 > 111
這個題目要解決的重點有兩處,
第一個是屏蔽掉null值,再來是自訂的排序邏輯。
在Oracle中用NVL(), CONV_TBL
在MySQL中用IfNull(), A B C
在SQL Server用IsNull(), -------------
轉換掉null值之後, 000 0 000
就可以賦予自訂的排序邏輯。 333 1 333
NA 2 [null]
如果是大量且常用的商業邏輯, 222 3 222
可以做一個轉換表,大概像右邊: 111 4 111
SELECT Value1,C FROM (
SELECT Value1,min(B) AS minB FROM T1
LEFT JOIN CONV_TBL ON NVL(Value2,'NA')=A
GROUP BY Value1
) LEFT JOIN CONV_TBL ON minB=B
如果不允許做一個轉換表,
就用CASE WHEN語法寫多個判斷式也可以。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.166.51.233
推
02/03 00:16, , 1F
02/03 00:16, 1F
討論串 (同標題文章)