2017-02-07 5 views
0

ich eine Tabelle Abfrageergebnis haben, die (nach einigen SQL-Abfragen) sieht wie folgt aus:Gruppe SQL Ergebnisse durch eindeutige Spalte und fügen Sie Rest auf eine Liste, in einer einzigartigen Gruppe

Element Subelement ID   Email    Value 

1003022 10003981 "454255" "[email protected]" 25.5  
1003022 10003981 "454109" "[email protected]" 34.45  
1003027 10033987 "454369" "[email protected]" 1.9 
1003027 10033987 "454255" "[email protected]" 25.5  
1003011 10021233 "454209" "[email protected]" 34.45 
1222011 13513544 "454209" "[email protected]" 34.45 

Das sind einige Veranstaltungen mit erste 2 Spalten unterschiedlich, als Gruppe. Col1 mit Col 2.

Basierend auf der ID (E-Mail und Wert sind die gleichen für eine ID), möchte ich so ein Ergebnis haben:

ID   Email    Value Elements 

"454255" "[email protected]" 25.5 {[1003022, 10003981], [1003027, 10033987]} 
"454109" "[email protected]" 34.45 {[1003022, 10003981], [1003011, 10021233], [1222011, 13513544]} 
"454369" "[email protected]" 1.9  {[1003027, 10033987]} 

oder ein beliebiges Format, die ID (E-Mail hält, Wert) in einer Zeile und fügt das Element und das Unterelement zu einer Liste/einem Array hinzu.

UPDATE: Ich habe versucht group_concat, aber konnte keinen Weg finden, es zu tun.

Antwort

1

Wie wäre es damit?

#standardSQL 
SELECT ID, email, value, ARRAY_AGG(STRUCT(element, subelement)) AS Elements 
FROM YourTable 
GROUP BY ID, email, value; 
0

mit Standard-SQL können Sie wie folgt vorgehen:

#standardSQL 
with t as 
(select 1003022 element, 10003981 subelement, "454255" id, "[email protected]" email, 25.5 value union all 
select 1003027, 10033987, "454255", "[email protected]", 25.5)  
SELECT id, email, value, 
     array_agg(struct<array<int64>>([element, subelement])) elements 
FROM t 
GROUP BY 1, 2, 3 
0
#standardSQL 
WITH yourTable AS (
    SELECT 1003022 AS Element, 10003981 AS Subelement, "454255" AS ID, "[email protected]" AS Email, 25.5 AS Value UNION ALL  
    SELECT 1003022 AS Element, 10003981 AS Subelement, "454209" AS ID, "[email protected]" AS Email, 34.45 AS Value UNION ALL  
    SELECT 1003027 AS Element, 10033987 AS Subelement, "454369" AS ID, "[email protected]" AS Email, 1.9 AS Value UNION ALL 
    SELECT 1003027 AS Element, 10033987 AS Subelement, "454255" AS ID, "[email protected]" AS Email, 25.5 AS Value UNION ALL  
    SELECT 1003011 AS Element, 10021233 AS Subelement, "454209" AS ID, "[email protected]" AS Email, 34.45 AS Value UNION ALL 
    SELECT 1222011 AS Element, 13513544 AS Subelement, "454209" AS ID, "[email protected]" AS Email, 34.45 AS Value 
)  
SELECT 
    ID, Email, Value, 
    CONCAT('{', STRING_AGG(CONCAT('[', CAST(Element AS STRING), ',', CAST(Subelement AS STRING), ']')), '}') AS Elements 
FROM yourTable 
GROUP BY ID, Email, Value 
-- ORDER BY Email 

Das Ergebnis ist

ID  Email    Value Elements  
454255 [email protected] 25.5 {[1003022,10003981],[1003027,10033987]} 
454209 [email protected] 34.45 {[1003022,10003981],[1003011,10021233],[1222011,13513544]} 
454369 [email protected] 1.9  {[1003027,10033987]} 

Ihre Frage ist ein wenig verschwommen in einem Gefühl der erwarteten Ausgangs , also hast du viele Antworten
Ich denke - je mehr desto besser: o)

Verwandte Themen