2017-09-26 5 views
-1

Ich möchte Summe und grouby mit ID berechnen und ID als Spaltenüberschrift und Summe als Wert konvertieren.Pivot/Transponieren in Bienenstock

Zum Beispiel

ID|amount 
1|100 
1|200 
2|100 

fertige Ausgabe

1|2 
300|100 

Alle Zeiger: I unten Abfrage

select * from table pivot(sum(amount) for id in ("666","111")) 

aber unter Fehler versucht haben, bekommen, und ich sehe nicht, ob ich verpasst irgendeinen EOF

org.apache.spark.sql.AnalysisException: missing EOF at '(' near 'PIVOT'; line 1 pos 63 
     at org.apache.spark.sql.hive.HiveQl$.createPlan(HiveQl.scala:318) 
+0

Haben Sie eine begrenzte Anzahl von IDs? –

+0

Die versuchte Abfrage stimmt nicht mit dem Datensample überein. –

Antwort

0

Sie können die bedingte Aggregation verwenden, da Hive pivot nicht unterstützt.

select sum(case when id='111' then amount else 0 end),sum(case when id='666' then amount else 0 end) 
from tbl 

id='111' gibt eine boolean die zu int zur Summierung umgewandelt wird.

Dies setzt voraus, dass eine begrenzte Anzahl von IDs in der Tabelle vorhanden ist.

+0

Dies doesn ' t lösen das problem.it gegebenen vorkommen wie unter c1-> 2 und C2-> 1 (kann nicht kommentar hier formatieren). In Realfall werde ich Datum verwenden, um by.so zu gruppieren. Ich kann maximal 30 IDs haben – user2895589

+0

überprüfen Sie die Bearbeitung .. –

+0

Ich lief Query wie oben es gibt keine aggregierte Summe der Betragsspalte.Es gibt Vorkommen von Wert – user2895589

-1

Die Syntax für die PIVOT Klausel in Oracle/PLSQL ist:

SELECT * FROM 
(
    SELECT column1, column2 
    FROM tables 
    WHERE conditions 
) 
PIVOT 
(
    aggregate_function(column2) 
    FOR column2 
    IN (expr1, expr2, ... expr_n) | subquery 
) 
ORDER BY expression [ ASC | DESC ]; 

das Semikolon enthält. Geben Sie es erneut und lassen Sie es uns wissen.

+2

ist die Frage über 'Hive'. Nicht "Oracle". –

+0

@VamsiPrabhala Bienenstock war ein Orakelprodukt nicht ?! –

+1

NO .. Sie können sicher googlen und herausfinden :) –