2017-02-07 3 views
0

に私は(いくつかのSQLクエリの後に)次のようになり、テーブルのクエリの結果を持っている:一意の列によってグループSQL結果、リストに残りの部分を追加し、一意のグループ

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 

は、それらはといくつかのイベントです最初の2つの列が異なる、グループとして。 、(Eメール

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]} 

またはIDを保持し、任意のフォーマット:IDに基づいて、コル2.

でCOL1は、(電子メールや値は1つのIDで同じです)、私はこのような結果を持つようにしたいです値)を1行に追加し、要素とサブ要素をリスト/配列に追加します。

更新: 私はgroup_concatを試しましたが、それを行う方法が見つかりませんでした。

答えて

1

これはいかがですか?標準SQLで

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

は、次の操作を実行できます。

#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 

結果は

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]} 

あなたの質問は期待される出力の意味で少しあいまいです、あなたは多くの答えを持っています。
私は思う - より多くのメリヤ:o)

関連する問題