2016-05-16 6 views
2

Ich muss einen subselect tun, wenn die Zeichenfolge 'DebugData' Ziffern enthält. Aber in Google große Abfrage, bekomme ich den Fehler "Subselect nicht erlaubt in Select-Klausel". Jede Hilfe würde geschätzt werden !!Wählt innerhalb von case-Anweisungen in Google große Abfrage

%%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 

habe ich versucht, dies aber nicht funktioniert:

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 

Antwort

1

stattdessen eine LEFT JOIN verwenden.

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 Verwendung erlaubt es Zeilen aus der ersten Tabelle zurückzugeben, die den Verbindungszustand nicht übereinstimmen.

+0

Ich habe zwei where-Anweisungen, eine für die Hauptauswahl und eine weitere für Subselect. Ich bin mir nicht sicher, wie man zwei Where's für zwei Selects benutzt. – user3447653

+0

Verwenden Sie eine 'WHERE'-Anweisung und kombinieren Sie sie mit' AND'. – Barmar

+0

Ich habe den obigen Code versucht (Hinzugefügt den Code in meinem Hauptabschnitt), aber das funktioniert nicht .. – user3447653

Verwandte Themen