BigQuery - заменить нулевое значение в зависимости от условия - PullRequest
0 голосов
/ 23 января 2020

У меня есть 2 таблицы 1 и 2. Внутри table1 я создал производное поле «actualoutput», в котором я использую соединение с таблицей-2 с «newgroup» в качестве соединителя, чтобы получить поле «finalgroup».

Теперь в выходных данных В таблице поле finalgroup имеет значения NULL, выделенные синим цветом.

То, что я хочу, это - ТОЛЬКО когда значение равно "NULL" в "finalgroup", я хочу заменить его условием на основе поля "website", присутствующего в table1, и создать новый столбец "finalgroup2" ». Поэтому, если присутствует «веб-сайт», то finalgroup2 будет иметь значение «web», иначе «offline» (выделено красным), а все остальные сохранят значение «finalgroup».

Но я не получаю логи c (пробовал несколько попыток) получить вывод, как показано на рисунке - FinalTable. Если возможно получить эту логику c непосредственно в поле "finalgroup", то я в порядке с этим, то есть нет необходимости в "finalgroup2"

Может кто-нибудь, пожалуйста, помогите.

См. Изображение:

enter image description here

Запрос, который я использовал:

SELECT
  source,
  detail,
  CONCAT(IFNULL(Source,
      ''), "-", IFNULL(Detail,
      '')) AS actualoutput,
  website,
  newgroup,
  finalgroup,
  CASE
    WHEN finalgroup IS NULL AND website IS NOT NULL THEN "web"
    WHEN finalgroup IS NULL
  AND website IS NULL THEN "offline"
  ELSE
  "finalgroup"
END
  AS finalgroup2
FROM (
  SELECT
    source,
    detail,
    CONCAT(IFNULL(Source,
        ''), "-", IFNULL(Detail,
        '')) AS actualoutput,
    website,
    newgroup,
    finalgroup
  FROM (
    SELECT
      source,
      detail,
      CONCAT(IFNULL(Source,
          ''), "-", IFNULL(Detail,
          '')) AS actualoutput,
      website
    FROM (
      SELECT
        source,
        detail,
        website
      FROM
        `dataset.concat`))
  LEFT JOIN (
    SELECT
      newgroup,
      finalgroup
    FROM
      `dataset.finalgroup`)
  ON
    actualoutput=newgroup)

1 Ответ

1 голос
/ 23 января 2020

Попробуйте сделать это:

WITH
  tnew AS(
  SELECT
    source,
    detail,
    CONCAT(IFNULL(Source,
        ''), "-", IFNULL(Detail,
        '')) AS actualoutput,
    website
  FROM
    table1 )
SELECT
  source,
  detail,
  website,
  actualoutput,
  finalgroup,
  CASE
    WHEN finalgroup IS NOT NULL THEN finalgroup
    WHEN finalgroup IS NULL
  AND website IS NOT NULL THEN "web"
    WHEN finalgroup IS NULL AND website IS NULL THEN "offline"
END
  finalgroup2
FROM
  tnew
LEFT JOIN
  table2
ON
  actualoutput = newgroup

Пожалуйста, дайте мне знать, если это поможет вам

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