看板 Database 關於我們 聯絡資訊
: 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
jameswiki:推!不過原作說是面試考題,我想應是要考case When用法的 02/03 00:16