SQL在DB2中对两个不同的列进行排序

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

我有以下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 
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非常感谢。是的,关于这个描述我很抱歉。我更新了我的问题。您提供的解决方案不适用于“空白”条目。(因为正式的描述,是我的错)。感谢您的更新。