2017-04-11 2 views
1

私は追跡データを持つテーブルを持っています。他の値の中には、表にはtraffic_medium、traffic_source、およびtraffic_campaignという列があります。列には時には(none)またはnullとして値が含まれます。一部空またはnullの複数の基準で結合する

他のテーブルの訪問者の合計を一致条件として、メディア、スコア、キャンペーンの左結合を使用して一致させたいとします。

これは、すべての列にデータが含まれている場合に問題ありません。 1つの列の値が(none)またはnullの場合は機能しません。

私はBigQueryと従来のSQLを使用しています。

SELECT 
A.id, 
A.trafficSource_medium, 
A.trafficSource_source, 
A.trafficSource_campaign, 
B.sum_visitor AS sum_visitor 

FROM [table] AS A 
left outer join (Select 
count(distinct fullvisitorID) as sum_visitor, 
trafficSource_medium, 
trafficSource_source, 
trafficSource_campaign 
FROM [table2] 
GROUP BY trafficSource_medium, 
trafficSource_source, 
trafficSource_campaign) 
AS B 
on A.trafficSource_medium=B.trafficSource_medium AND  
A.trafficSource_source=B.trafficSource_source AND 
A.trafficSource_campaign=B.trafficSource_campaign 

ありがとうございました!

答えて

0

次のようなものを試す
それぞれのフィールドはSTRING型であると仮定します。彼らはINTある場合 - 「N/A」置き換えるのは、-999ましょうと - ここ

#legacySQL 
SELECT 
    A.id, 
    CASE WHEN A.trafficSource_medium = 'n/a' THEN NULL ELSE A.trafficSource_medium END AS trafficSource_medium, 
    CASE WHEN A.trafficSource_source = 'n/a' THEN NULL ELSE A.trafficSource_source END AS trafficSource_source, 
    CASE WHEN A.trafficSource_campaign = 'n/a' THEN NULL ELSE A.trafficSource_campaign END AS trafficSource_campaign, 
    B.sum_visitor AS sum_visitor 
FROM (
    SELECT 
    id, 
    IFNULL(trafficSource_medium, 'n/a') AS trafficSource_medium, 
    IFNULL(trafficSource_source, 'n/a') AS trafficSource_source, 
    IFNULL(trafficSource_campaign 'n/a') AS trafficSource_campaign 
    FROM [table] 
) AS A 
LEFT OUTER JOIN (
    SELECT 
    COUNT(DISTINCT fullvisitorID) AS sum_visitor, 
    IFNULL(trafficSource_medium, 'n/a') AS trafficSource_medium, 
    IFNULL(trafficSource_source, 'n/a') AS trafficSource_source, 
    IFNULL(trafficSource_campaign 'n/a') AS trafficSource_campaign 
    FROM [table2] 
    GROUP BY 
    trafficSource_medium, 
    trafficSource_source, 
    trafficSource_campaign 
) AS B 
ON A.trafficSource_medium = B.trafficSource_medium 
AND A.trafficSource_source = B.trafficSource_source 
AND A.trafficSource_campaign = B.trafficSource_campaign 

アイデアがいくつかにNULLを「変換」することで、それぞれのフィールドの値として使用されない定数選択することが重要にあなたがJOIN可能なので、最後のSELECTでNULLに戻します。

標準SQLに移行することができれば、以下のように変更することができます

#standardSQL 
SELECT 
    A.id, 
    A.trafficSource_medium, 
    A.trafficSource_source, 
    A.trafficSource_campaign, 
    B.sum_visitor AS sum_visitor 
FROM `table` AS A 
LEFT OUTER JOIN (
    SELECT 
    COUNT(DISTINCT fullvisitorID) AS sum_visitor, 
    trafficSource_medium, 
    trafficSource_source, 
    trafficSource_campaign 
    FROM `table2` 
    GROUP BY 
    trafficSource_medium, 
    trafficSource_source, 
    trafficSource_campaign 
) AS B 
ON IFNULL(A.trafficSource_medium, 'n/a') = IFNULL(B.trafficSource_medium, 'n/a') 
AND IFNULL(A.trafficSource_source, 'n/a') = IFNULL(B.trafficSource_source, 'n/a') 
AND IFNULL(A.trafficSource_campaign, 'n/a') = IFNULL(B.trafficSource_campaign, 'n/a') 
関連する問題