Операнд сравнения по умолчанию в состоянии SELECT WHERE - PullRequest
1 голос
/ 25 сентября 2019

У меня есть таблица CategoryColours , если категория не найдена, она должна возвращать цвета из категории по умолчанию "*".

Пример, если таблица содержит следующие строки:

Category  Color
*         white
*         black
1         red
1         blue
1         green
1         black

Если я ищу категорию «1», запрос должен получить 4 цвета.

Если я ищу категорию «2», в которой нет записей в таблице, запросдолжен получить 2 цвета из категории "*".

Можно ли использовать OpenSQL для получения точного списка, который мне нужен в одном выражении?

Я пробовал с CASE и подзапросами (EXIST), но я не справился.

Это не пробка для моего кода, поскольку я могу просто проверить, есть ли в моей категории записи в первую очередь, или выбрать свою категорию + значение по умолчанию всегда, а затем удалить значение по умолчанию, если другоеимеет записи.

1 Ответ

2 голосов
/ 25 сентября 2019

Я думаю, что вы можете использовать UNION.Я не пробовал код, он может содержать ошибки типа.

SELECT
      category,
      color
    FROM CategoryColours
   WHERE category = lv_category
UNION
SELECT
  category,
  color
FROM CategoryColours
WHERE category eq '*'
 AND NOT EXISTS ( SELECT color 
                    FROM CategoryColours 
                   WHERE category = lv_category
                 )
INTO TABLE @DATA(lt_itab).
...