SQL заказывает два разных столбца в DB2 - PullRequest
0 голосов
/ 06 февраля 2019

У меня следующий 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

Я хотел бы получить следующий результат:

MsgType     MsgSubType
300 
300 
515 
515 
515 
598         515
598         515
598         515
535 
535 
535 

Существует также возможное решение для выполнения этой задачи с ORDER BY и CASE, но тогда мне нужно будет «кодировать» каждый MsgType, что немного раздражает.(900 MsgTypes) и если придет новый, мне нужно будет снова изменить запрос.

edit: // MsgType и MsgSubType определены как символ, и значение (если оно не заполнено) равно BLANK.

Определение выглядит так:

with T_MESSAGE (MsgTypeCD, MsgSubTypeCD) as (values
  ('300', ' ')
, ('300', ' ')
, ('515', ' ')
, ('515', ' ')
, ('515', ' ')
, ('535', ' ')
, ('535', ' ')
, ('535', ' ')
, ('598', '515')
, ('598', '515')
, ('598', '515')
)

1 Ответ

0 голосов
/ 06 февраля 2019

Вы не предоставили формального описания точных правил получения этого результата, но я постараюсь угадать.

Запрос ниже возвращает желаемый результат.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...