2016-05-16 46 views
2

當字符串'DebugData'包含數字時,我必須執行子選擇。但在谷歌大查詢中,我收到錯誤「Subselect不允許內部選擇子句」。任何幫助,將不勝感激 !!在Google大查詢中選擇內部case語句

%%sql --module Test2 
DEFINE QUERY Test2 
SELECT 
HardwareId, DebugReason, DebugData, 
CASE 
    WHEN lower(DebugData) LIKE 'ver%' THEN 'Verizon' 
    WHEN lower(DebugData) LIKE 'ro%' THEN 'Rogers' 
    WHEN REGEXP_MATCH(DebugData,'\\d+') THEN c.Network 
    (SELECT Network from [red-road-574:RawDebug.CarrierDetails] Where Mcc = SUBSTR(DebugData,0,3) and Mnc = SUBSTR(DebugData,4,7)) 
    ELSE REGEXP_REPLACE(DebugData,'\\?',' ') 
END 
    as ActualDebugData 
    FROM (TABLE_DATE_RANGE([bigdata:RawDebug.T], TIMESTAMP ('2016-05-15'),TIMESTAMP('2016-05-15'))) 
    CROSS JOIN [bigdata:RawDebug.CarrierDetails] c 
    WHERE DebugReason = 50013 
    LIMIT 200 

我嘗試這樣做,但這不是工作:

SELECT 
    DebugData, 
    CASE 
    WHEN lower(DebugData) LIKE 'jas%' THEN 'Jasper' 
    WHEN REGEXP_MATCH(DebugData,'\\d+') THEN c.Network 
    ELSE REGEXP_REPLACE(DebugData,'\\?',' ') 
    END 
    as ActualDebugData 
    FROM (TABLE_DATE_RANGE([bigdata:RawDebug.T],TIMESTAMP ('2016-05-15'),TIMESTAMP('2016-05-15')) d) 
    CROSS JOIN [bigdata:RawDebug.CarrierDetails] c 
    WHERE d.DebugReason = 50013 and c.Mcc = SUBSTR(DebugData,0,3) 
LIMIT 200 

回答

1

使用LEFT JOIN代替。

SELECT 
    DebugData, 
    CASE 
    WHEN lower(DebugData) LIKE 'jas%' THEN 'Jasper' 
    WHEN REGEXP_MATCH(DebugData,'\\d+') THEN c.Network 
    ELSE REGEXP_REPLACE(DebugData,'\\?',' ') 
    END 
    as ActualDebugData 
    FROM (TABLE_DATE_RANGE([bigdata:RawDebug.T],TIMESTAMP ('2016-05-15'),TIMESTAMP('2016-05-15')) d) 
    LEFT JOIN [bigdata:RawDebug.CarrierDetails] c ON c.Mcc = SUBSTR(DebugData,0,3) 
    WHERE d.DebugReason = 50013 
LIMIT 200 

使用LEFT JOIN允許它從不符合加入條件的第一表返回行。

+0

我有兩個where語句,一個用於主選擇,另一個用於子選擇。不知道如何使用兩個選擇的地方。 – user3447653

+0

使用一個'WHERE'語句並將它們與'AND'結合使用。 – Barmar

+0

我已經嘗試了上面的代碼(在我的主要部分添加了代碼),但這不起作用。 – user3447653