我在下面的查询中,我希望连接()
的合并列结果并根据颜色排序,以便FC,FM,MS
首先出现'R'
,然后'Y'
}。我试过下面的查询,但排序不正常。
'G'
答案 0 :(得分:1)
只需使用CASE EXPRESSION
,我更喜欢它,因为它更容易阅读:
ORDER BY CASE WHEN FC = 'R' THEN 1
WHEN FC = 'Y' THEN 2
WHEN FC = 'G' THEN 3
END,
CASE WHEN FM = 'R' THEN 1
WHEN FM = 'Y' THEN 2
WHEN FM = 'G' THEN 3
END,
CASE WHEN MS = 'R' THEN 1
WHEN MS = 'Y' THEN 2
WHEN MS = 'G' THEN 3
END
如果我明白你想做什么,我不是按照你想做的逻辑,我认为它的作用是在FC||FM||MS
等于R/Y/G
时检查,我认为不是
编辑:如果您想先订购,如果其中一个是' R',那么如果其中一列是' Y' ...
ORDER BY CASE WHEN 'R' IN(FC,FM,MS) THEN 1
ELSE 2
END,
CASE WHEN 'Y' IN(FC,FM,MS) THEN 1
ELSE 2
END,
CASE WHEN 'G' IN(FC,FM,MS) THEN 1
ELSE 2
END
答案 1 :(得分:1)
将字符串连接值分隔为单独的解码:
ORDER BY DECODE( FC, 'R', 1, 'Y', 2, 'G', 3 ),
DECODE( FM, 'R', 1, 'Y', 2, 'G', 3 ),
DECODE( MS, 'R', 1, 'Y', 2, 'G', 3 )
如果您希望忽略值NULL
,只是按第一个非NULL
排序,那么:
ORDER BY DECODE( COALESCE( FC, FM, MS ), 'R', 1, 'Y', 2, 'G', 3 ),
DECODE( COALESCE( FM, MS), 'R', 1, 'Y', 2, 'G', 3 ),
DECODE( MS, 'R', 1, 'Y', 2, 'G', 3 )
或:
ORDER BY DECODE( COALESCE( FC, FM, MS ), 'R', 1, 'Y', 2, 'G', 3 ),
DECODE( COALESCE( FM, MS, FC ), 'R', 1, 'Y', 2, 'G', 3 ),
DECODE( COALESCE( MS, FC, FM ), 'R', 1, 'Y', 2, 'G', 3 )