Bigquery выберите столбец, только если не ноль - PullRequest
0 голосов
/ 19 января 2020

Я абсолютный новичок в Bigquery и SQL, поэтому прошу прощения, если это глупый вопрос. У меня есть таблица больших запросов, как эта

|Name|Value1|Value2|Value3|Value4|Value5|Value6|
|Ben |19    |45    |null  |19    |13    |null  |
|Bob |34    |null  |12    |null  |45    |43    |

Мой запрос выбирает только одну строку, которая соответствует имени в столбце Имя. Я хочу, чтобы результат отображал только столбцы, которые имеют ненулевые значения. Например, если я делаю SELECT * FROM mytable WHERE Name = "Bob", я хочу, чтобы результат выглядел как

|Name|Value1|Value3|Value5|Value6|
|Bob |34    |12    |45    |43    |

Аналогично, если я выбираю для Бена, я хочу, чтобы результат выглядел как

|Name|Value1|Value2|Value4|Value5|
|Ben |19    |45    |19    |13    |

Я пытался SELECT IF но, похоже, синтаксис неверен.

Ответы [ 3 ]

0 голосов
/ 19 января 2020

Вы не можете выбрать переменное количество столбцов, но вы можете создать SQL с комбинацией агрегатных / сводных функций. Вы можете тратить больше времени, чем стоит пытаться это сделать. Я трачу около двух часов на документацию, и все еще чувствую себя почти невежественным (если не поможет, у меня там нет учетной записи, и моя собственная база данных не имеет таких же точных функций).

См. Google BigQuery Documentation для примеров.

Я думаю, что вы можете сделать это с UNNEST() и ARRAY(), но вы потеряете исходную информацию заголовка столбца в процессе .

0 голосов
/ 20 января 2020

Вы не можете сделать это динамически в SQL. Если вам нужен такой запрос, вы можете создать его вручную, но это зависит от результатов, которых вы хотите достичь.

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

SELECT value1,value2,value4,value5 FROM mytable WHERE value3 IS NULL AND value6 is NULL
UNION ALL
SELECT value1,value3,value5,value6 FROM mytable WHERE value2 IS NULL AND value4 is NULL 

В этом примере можно увидеть, что этот тип запроса сложно построить, если у вас много условий. Кроме того, для работы UNION ALL всегда потребуется одинаковое количество столбцов в каждом отдельном запросе. Если вам нужно создать общий c запрос для этого, это будет невозможно.

Надеюсь, это поможет

0 голосов
/ 19 января 2020

Я сомневаюсь, что это может быть достигнуто, потому что любой оператор SQL будет воздействовать на запись (и), то есть на различные столбцы, поэтому, если столбец равен нулю, он повлияет на все столбцы в записи, которые должны быть извлечены. SQL ЗАЯВЛЕНИЯ ПОЛУЧИТЬ СТРОКИ (КОЛОННЫ ОТЗЫВАЮТСЯ)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...