2017-11-22 8 views
0

BigQueryのデータにnull値を置き換えるクエリはのは、私のクエリがあるとしましょう

#standardSQL 
SELECT a.person, score, dte 
FROM 
(
    SELECT 'Aaron' person UNION ALL 
    SELECT 'Baron' person UNION ALL 
    SELECT 'Cindy' person 
)a 
LEFT JOIN 
(
    SELECT 'Aaron' person, 10 score, 20 dte UNION ALL 
    SELECT 'Baron' person, 20 score, 20 dte UNION ALL 
    SELECT 'Aaron' person, 10 score, 21 dte UNION ALL 
    SELECT 'Cindy' person, 10 score, 21 dte UNION ALL 
    SELECT 'Baron' person, 20 score, 21 dte 
)b 
on a.person = b.person 
order by dte 

結果は、私は0のスコアとDTEと「シンディ」のも、データを持つことができ、今

Row person score dte 
1 Aaron 10  20 
2 Baron 20  20 
3 Aaron 10  21 
4 Baron 20  21 
5 Cindy 10  21 

です= 20?

ので期待は次のとおりです。

Row person score dte 
1 Aaron 10  20 
2 Baron 20  20 
3 Cindy 0  20 
4 Aaron 10  21 
5 Baron 20  21 
6 Cindy 10  21 

それは参加左を使用する必要はありません。基本的には、1つのテーブルしか持っていませんが、それぞれの人と人に対して0のデータが必要です。以下

答えて

2

は、以下のように結果にBigQueryの標準SQL

#standardSQL 
WITH persons AS (
    SELECT 'Aaron' person UNION ALL 
    SELECT 'Baron' person UNION ALL 
    SELECT 'Cindy' person UNION ALL 
    SELECT 'Mike' person 
), scores AS (
    SELECT 'Aaron' person, 10 score, 20 dte UNION ALL 
    SELECT 'Baron' person, 20 score, 20 dte UNION ALL 
    SELECT 'Aaron' person, 10 score, 21 dte UNION ALL 
    SELECT 'Cindy' person, 10 score, 21 dte UNION ALL 
    SELECT 'Baron' person, 20 score, 21 dte 
), dtes AS (
    SELECT DISTINCT dte 
    FROM scores 
) 
SELECT a.person, IFNULL(score, 0) score, d.dte 
FROM persons a CROSS JOIN dtes d 
LEFT JOIN scores b 
ON a.person = b.person AND d.dte = b.dte 
ORDER BY dte, person 

するためのものである

person score dte  
Aaron 10  20  
Baron 20  20  
Cindy 0  20  
Mike  0  20  
Aaron 10  21  
Baron 20  21  
Cindy 10  21  
Mike  0  21