2017-09-19 7 views
0

Ich habe eine Tabelle A mit n Spalten. Spalte c1 hat Karten in dem folgenden Muster:Hive Case Statement

c1 

79213 
86420 
94237 
94237-H 
65874 
32650 
26198 
26198-H 
52041 
49567 
49567-H 
..... 
..... 

Tickets 94237-H, 26198-H, 49567-H werden als Helfer Tickets und ihre Eltern sind 94237, 26198, 49567 resp. Kann jemand helfen, eine Hive-Abfrage zu schreiben, um eine weitere Tabelle B mit allen Spalten in Tabelle A zu erzeugen, die die Helfer-Tickets 'H' in Spalte c1 entfernt und eine weitere Spalte ch mit den folgenden Ergebnissen hinzufügt: In Spalte ch sollten die übergeordneten Tickets sein Beschriftete 1 und der Rest der Tickets sollte mit 0 gekennzeichnet werden.

c1  ch 

79213  0 
86420  0 
94237  1 
65874  0 
32650  0 
26198  1 
52041  0 
49567  1 
..... 
..... 

Vielen Dank im Voraus.

+1

Was haben Sie versucht? Zeigen Sie uns Ihren aktuellen Code-Versuch. – jarlh

Antwort

0

Zuerst spaltete die Informationen in den key und in Teh helper flag

select 
    replace(c1,'-H') c1, 
    case when c1 like '%-H' then 1 end as is_helper 
from t1 

als einfach alle Schlüssel erhalten (GROUP BY c1) und MAX den Scheck verwenden, wenn ein Helfer den Schlüssel vorhanden ist.

with t2 as (
select 
    replace(c1,'-H') c1, 
    case when c1 like '%-H' then 1 end as is_helper 
from t1) 
select c1, max(is_helper) ch 
from t2 
group by c1; 

gibt

C1    CH 
------- ---------- 
86420    
65874    
32650    
26198   1 
79213    
94237   1 
52041    
49567   1 

Hinweis, ich habe keine Bienenstock haben, so in Probleme reformulte oder othe Standardfunktionen nutzen.

Beispiel:

select 
    replace(c1,'-H') c1, 
    max(case when c1 like '%-H' then 1 end) as ch 
from t1 
group by replace(c1,'-H')