2016-07-27 18 views
2

BigQueryで新しい標準SQL機能を使用しようとしています。しかし、私は次のことを行う方法のようドキュメントの参照を見つけることが起こることができません。BigQuery Standrad SQL行を列に転記する方法

私が持っている入力された:

enter image description here

私は次のようにそれを転置しようとしています:

enter image description here

私はSQLのようにピボット機能を使用することを期待していたが、私はピボットを作成することがBigQueryの標準SQL機能にどのように動作するかを見つけることが起こることができません。

これを実現する方法はありますか?

答えて

0

ことがUNION(カンマ操作)だ、

使用シンプルな労働組合のピボットされていません - しかし列の数はありますか?

転置する必要がある列と同数のSELECTを持つことで、tempという名前のサブクエリでARRAYの作成を維持する必要があります。以下の例では、あなたの質問に3つあります。 tables.get APIで積載テーブルスキーマによって、クエリの下に構築しながらschema's fieldsをループして、最終的にそれを実行している - あなたの選択のクライアントにコーディングすることによってではなく、この部分のavoid the manual workに方法はありません


再び - これはあなたがそうここ

探しているもののように見えていないクライアントのコーディングが必要、ここで私達は行く:

WITH temp AS (
    SELECT B, 
    ARRAY(
     SELECT AS STRUCT 't1' AS B1, t1 AS Value UNION ALL 
     SELECT AS STRUCT 'm1' AS B1, m1 AS Value UNION ALL 
     SELECT AS STRUCT 'p1' AS B1, p1 AS Value 
    ) AS bb 
    FROM YourTable 
) 
SELECT B, bb.B1 AS B1, bb.Value AS Value 
FROM temp t, t.bb 

あなたは

WITH YourTable AS (
    SELECT 'a' AS B, 1 AS t1, 2 AS m1, 3 AS p1 UNION ALL 
    SELECT 'b' AS B, 4 AS t1, 5 AS m1, 6 AS p1 UNION ALL 
    SELECT 'c' AS B, 7 AS t1, 8 AS m1, 9 AS p1 UNION ALL 
    SELECT 'd' AS B, 10 AS t1, 11 AS m1, 12 AS p1 UNION ALL 
    SELECT 'e' AS B, 13 AS t1, 14 AS m1, 15 AS p1 UNION ALL 
    SELECT 'f' AS B, 16 AS t1, 17 AS m1, 18 AS p1 
), 
temp AS (
    SELECT B, 
    ARRAY(
     SELECT AS STRUCT 't1' AS B1, t1 AS Value UNION ALL 
     SELECT AS STRUCT 'm1' AS B1, m1 AS Value UNION ALL 
     SELECT AS STRUCT 'p1' AS B1, p1 AS Value 
    ) AS bb 
    FROM YourTable 
) 
SELECT B, bb.B1 AS B1, bb.Value AS Value 
FROM temp t, t.bb 
0

これは、あなたがYourTableに持つ行のオプション

以下の番号が、ここでは関係ありませんを参照してください

select B\B1 as B, 't1' as B, t1 as value, 
select B\B1 as B, 'm1' as B, m1 as value, 
select B\B1 as B, 'p1' as B, p1 as value; 
+0

これでそれをテストすることができますしかし、私が提供したテーブルは、これを行うためのテーブルの単純化されたバージョンです。私は数百のB \ B1s値を持っているので、私は手動作業を避ける必要があります。 –

+1

データベースにSQLコードを記述する構文はありません。この場合、SQL構文を生成するためにコーディング言語を使用する必要があります。 – Pentium10

+0

私はそれに頼らなければならないことを恐れていました。ご協力ありがとうございました! –