«Пометка» записи с использованием нескольких критериев - PullRequest
0 голосов
/ 05 марта 2020

Я использую Presto. Я хочу назначить строку с несколькими «тегами», используя разные критерии, которые не являются взаимоисключающими.

Например, допустим, есть таблица с 4 столбцами:

|  food      | color  | type        | on_sale |
|------------+--------+-------------+---------|
|  apple     | red    | fruit       | TRUE    |
|  banana    | yellow | fruit       | FALSE   |
|  cornbread | yellow | baked goods | TRUE    |
|  apple pie | brown  | baked goods | TRUE    |

Я бы нравится отмечать каждую еду тегами, которые я определил, такими как red food, red food on sale, yellow baked goods, yellow food on_sale ТОЛЬКО. В этом примере яблоко соответствует двум тегам: red food и red food on sale.

Я не могу использовать CASE (как показано ниже), потому что я получу «красную еду» только тогда, когда я действительно этого захочу помечены как оба.

CASE 
   WHEN color = 'red' THEN 'red food'
   WHEN color = 'red' AND `on_sale` = TRUE THEN 'red food on sale'
   (and so on)

В идеале я хочу вернуть массив, который может захватывать более 1 «тега» или дублировать столбцы с одной строкой для каждого тега, но я понятия не имею, как это сделать. Есть идеи?

Заранее спасибо!

1 Ответ

0 голосов
/ 05 марта 2020

Вы можете использовать конкатенацию строк:

LTRIM(CASE WHEN color = 'red' THEN ' red food' ELSE '' END ||
      CASE WHEN `on_sale` = TRUE THEN ' on sale' ELSE '' END
      END)
...