Как вернуть отдельные строки с указанным c условием? - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть таблица, которая выглядит следующим образом:

| FIELD_1 | FIELD_2 | FIELD_3 | FIELD_4 |
|---------|---------|---------|---------|
|   NULL  |   NULL  | potato  |  apple  |
|  basket |  fruit  | potato  |  apple  |
|   NULL  |   NULL  | potato  |  apple  |
|.........|.........|.........|.........|

FIELD_3, FIELD_4 всегда заполнены.

Я хочу go через эту таблицу и получить значения DISTINCT всех полей, но для строк, для которых FIELD_1, FIELD_2 заполняются, чтобы получить только этот набор полей вместо NULLS.

Для приведенной выше таблицы, которая будет возвращать только:

|  basket |  fruit  | potato  |  apple  |

если бы этот ряд был заполнен только картофелем и яблоком в FIELD_3, FIELD_4.

В прошлом я делал нечто подобное с внутренним объединением, в котором я сохранял бы только максимальная строка FIELD_1, FIELD_2, но теперь поля являются строковыми, и я хочу проверить, является ли значение NULL или нет.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Хммм. , , если я правильно понимаю, вы хотите отфильтровать значения NULL в первых двух столбцах, когда есть другие значения. Но вы хотите сохранить их, если их нет:

select t.*
from (select t.*,
             count(field_1) over (partition by field_3, field_4) as cnt_field_1,
             count(field_2) over (partition by field_3, field_4) as cnt_field_2,
             row_number() over (partition by field_3, field_4, field_1, field_2) as seqnum
      from t
     ) t
where seqnum = 1 and
      ( (field_1 is not null or field_2 is not null) or
        (cnt_field_1 = 0 and cnt_field_2 = 0)
      );
0 голосов
/ 23 апреля 2020
#standardSQL
SELECT DISTINCT *
FROM `project.dataset.table`
WHERE NOT FIELD_1 IS NULL AND NOT FIELD_2 IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...