SQL在DB2中对两个不同的列进行排序
我有以下SQL:SQL在DB2中对两个不同的列进行排序,sql,db2,Sql,Db2,我有以下SQL: EXEC SQL DECLARE MY-CUR CURSOR WITH HOLD FOR SELECT ,ME.MSGTYPECD ,ME.MSGSUBTYPECD FROM T_MESSAGE ME ORDER BY ME.MSGTYPECD ASC, ME.MSGSUBTYPECD ASC 结果集如下所示: MsgType MsgSubType 300 300 515 515 515 535 5
EXEC SQL
DECLARE MY-CUR CURSOR WITH HOLD FOR
SELECT ,ME.MSGTYPECD
,ME.MSGSUBTYPECD
FROM T_MESSAGE ME
ORDER BY ME.MSGTYPECD ASC,
ME.MSGSUBTYPECD ASC
结果集如下所示:
MsgType MsgSubType
300
300
515
515
515
535
535
535
598 515
598 515
598 515
with T_MESSAGE (MsgTypeCD, MsgSubTypeCD) as (values
('300', ' ')
, ('300', ' ')
, ('515', ' ')
, ('515', ' ')
, ('515', ' ')
, ('535', ' ')
, ('535', ' ')
, ('535', ' ')
, ('598', '515')
, ('598', '515')
, ('598', '515')
)
我想完成的是以下结果:
MsgType MsgSubType
300
300
515
515
515
598 515
598 515
598 515
535
535
535
还有一种可能的解决方案,可以使用orderby和CASE来完成这项任务,但是我需要对每个MsgType进行“编码”,这有点烦人。(900 MsgTypes)如果有新的查询,我需要再次更改查询
edit://MsgType和MsgSubType定义为字符,值(如果未填充)为空
定义如下:
MsgType MsgSubType
300
300
515
515
515
535
535
535
598 515
598 515
598 515
with T_MESSAGE (MsgTypeCD, MsgSubTypeCD) as (values
('300', ' ')
, ('300', ' ')
, ('515', ' ')
, ('515', ' ')
, ('515', ' ')
, ('535', ' ')
, ('535', ' ')
, ('535', ' ')
, ('598', '515')
, ('598', '515')
, ('598', '515')
)
您还没有提供获得此结果的确切规则的正式描述,但我将尝试猜测 下面的查询返回所需的输出
with T_MESSAGE (MsgTypeCD, MsgSubTypeCD) as (values
('300', ' ')
, ('300', ' ')
, ('515', ' ')
, ('515', ' ')
, ('515', ' ')
, ('535', ' ')
, ('535', ' ')
, ('535', ' ')
, ('598', '515')
, ('598', '515')
, ('598', '515')
)
SELECT ME.MSGTYPECD, ME.MSGSUBTYPECD
FROM T_MESSAGE ME
ORDER BY
COALESCE(nullif(ME.MSGSUBTYPECD, ''), ME.MSGTYPECD)
, ME.MSGSUBTYPECD
您还没有提供获得此结果的确切规则的正式描述,但我将尝试猜测 下面的查询返回所需的输出
with T_MESSAGE (MsgTypeCD, MsgSubTypeCD) as (values
('300', ' ')
, ('300', ' ')
, ('515', ' ')
, ('515', ' ')
, ('515', ' ')
, ('535', ' ')
, ('535', ' ')
, ('535', ' ')
, ('598', '515')
, ('598', '515')
, ('598', '515')
)
SELECT ME.MSGTYPECD, ME.MSGSUBTYPECD
FROM T_MESSAGE ME
ORDER BY
COALESCE(nullif(ME.MSGSUBTYPECD, ''), ME.MSGTYPECD)
, ME.MSGSUBTYPECD
另一种可能性是,他希望按任意一个数字中的最小值排序,而不考虑空值+1“未提供正式描述”。@Mark Barinstein非常感谢。是的,关于这个描述我很抱歉。我更新了我的问题。您提供的解决方案不适用于“空白”条目。(因为正式的描述,是我的错)。感谢更新。另一种可能是,他希望按任意一个数字中的最小值排序,而不考虑空值+1“未提供正式描述”。@Mark Barinstein非常感谢。是的,关于这个描述我很抱歉。我更新了我的问题。您提供的解决方案不适用于“空白”条目。(因为正式的描述,是我的错)。感谢您的更新。