作者ClareQ (人比人Cheese人)
看板Database
标题Re: [SQL ] 问一个排序的问题
时间Sat Feb 2 23:00:26 2008
: 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
1F:推 jameswiki:推!不过原作说是面试考题,我想应是要考case When用法的 02/03 00:16