BigQuery, как напечатать строку, даже если строка равна нулю - PullRequest
0 голосов
/ 30 ноября 2018

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

| was_the_item_bought  | 
| -------------------- | 
| "no one bought this" | 

Тем не менее, я получаю нулевые / никакие строки не отображаются.

| was_the_item_bought  | 
| -------------------- | 

Вот упрощенный запрос.

#StandardSQL

with store_list AS (
select item 
from store
),

bought_today AS (
select item 
from register 
where item = 'apple' # <--- only one item will be listed here
)

select (case when b.item is NULL 
    then "no one bought this" 
    else "bought" end) as was_the_item_bought
from store_list a  
left join bought_today b  
on a.item = b.item

Как я могу заставить его отображать строку?

Редактировать: обновлено: теперь указано b.item вместо item.

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

Возможно, вы захотите использовать коррелированное соединение:

#StandardSQL

with store_list AS (
SELECT * FROM UNNEST(['apple','banana']) product
),

bought_today AS (
select * FROM UNNEST(['banana','banana','banana']) product
)

select product
  , (SELECT COUNT(*) FROM bought_today b where a.product=b.product) bought_today
from store_list a

enter image description here

0 голосов
/ 03 декабря 2018

Разобрался после сна.Я чувствую себя глупо.

#StandardSQL

with store_list AS (
select item 
from store
),

bought_today AS (
select item 
from register 
where item = 'apple' # <--- only one item will be listed here
)

select b.item, 
(case when b.item = a.item
    then "no one bought this" 
    else "bought" end) as was_the_item_bought
from store_list a  
right join bought_today b  
on a.item = b.item
0 голосов
/ 30 ноября 2018

Я удивлен, что вы не получаете сообщение об ошибке «Элемент имени столбца неоднозначен в []», так как ваша инструкция case не указывает, какой «элемент» следует использовать?

Следующий запрос работаетхорошо.Есть ли что-нибудь в вашем магазине?

WITH store_list AS(
SELECT 'apple' item
UNION ALL
SELECT 'pear'),

bought_today AS (
SELECT 'orange' item
)

select (case when a.item is NULL 
then "no one bought this" 
else "bought" end) as was_the_item_bought
from bought_today b  
left join store_list a  
on a.item = b.item
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...