2016-10-31 10 views
0

私は以下の記述をしています。 BigQueryでそれを実行すると、時間が多大な列名であるというエラーが表示されます。私がする必要があるのは、何時間もテーブル(hours.icxmedia-servers:icx_metrics.issues_and_zenhub)を取得している状態ですが、それをグループ化してグループ化すると、BigQueryはそれが無効なグループであると言います。私は、あなたが、単一のSELECTでhoursと呼ばれる2つのフィールド、1パススルーhoursフィールドでを持って、他はで計算フィールドである私は近いですが、私はこだわっていると、何か提案がBigQueryのあいまいな列名

SELECT 
    repo, 
    ticket_number, 
    title, 
    hours, 
    assignee, 
    state, 
    pipeline, 
    created_at, 
    closed_at, 
    points, 
    quarter_closed, 
    year_closed, 
    CASE 
    WHEN state = 'Closed' 
    THEN sum(hours) 
    ELSE hours 
    END AS hours 
FROM (
SELECT 
    repo, 
    ticket_number, 
    title, 
    assignee, 
    state, 
    pipeline, 
    MAX(IF(closed_at IS NOT NULL, 0, MAX(ROUND((end_epoch-start_epoch)/3600,2)))) AS hours, 
    MIN(created_at) AS created_at, 
    MAX(closed_at) AS closed_at, 
    MAX(points) AS points, 
    QUARTER(closed_at) AS quarter_closed, 
    YEAR(closed_at) AS year_closed 
FROM 
    [icxmedia-servers:icx_metrics.issues_and_zenhub] AS historical, 
    (
    SELECT 
    repository.name AS repo, 
    IF(issue.number IS NOT NULL, issue.number, pull_request.number) AS ticket_number, 
    FIRST(IF(issue.number IS NOT NULL, issue.title, pull_request.title)) AS title, 
    IF(issue.number IS NOT NULL, issue.assignee.login, pull_request.assignee.login) AS assignee, 
pipeline.name AS pipeline, 
    IF(MAX(IF(IF(issue.number IS NOT NULL, issue.state, pull_request.state) == "open",0,1)) == 1, "closed","open") AS state, 
    IF(issue.number IS NOT NULL, issue.created_at, pull_request.created_at) AS created_at, 
    MAX(IF(issue.number IS NOT NULL, issue.closed_at, pull_request.closed_at)) AS closed_at, 
    NULL AS assign_times, 
    TIMESTAMP_TO_SEC(IF(issue.updated_at IS NOT NULL,issue.updated_at, pull_request.updated_at)) AS start_epoch, 
    LEAD(start_epoch, 1) OVER (ORDER BY ticket_number, start_epoch ASC) AS end_epoch, 
    MAX(estimate.value) AS points, 
    QUARTER(MAX(IF(issue.number IS NOT NULL, issue.closed_at, pull_request.closed_at))) AS quarter_closed, 
    YEAR(MAX(IF(issue.number IS NOT NULL, issue.closed_at, pull_request.closed_at))) AS year_closed 
    FROM 
    [icxmedia-servers:icx_metrics.gh_zh_data_production] 
    WHERE 
    issue.number IS NOT NULL 
    OR pull_request.number IS NOT NULL 
    GROUP BY 
    repo, 
    start_epoch, 
    pipeline, 
    ticket_number, 
    created_at, 
    assignee) AS prod 
    WHERE title=="LinkedIn" 

GROUP BY 
    repo, 
    ticket_number, 
    title, 
    assignee, 
    pipeline, 
    state, 
    quarter_closed, 
    year_closed 
) A 
GROUP BY  
repo, 
ticket_number, 
title, 
assignee, 
state, 
pipeline, 
created_at, 
closed_at, 
points, 
quarter_closed, 
year_closed 
+0

名前修飾列を使用..列タールにテーブルの別名を追加し、同じ名前を持つ.FOR [受け入れられたとしてマーク解答]曖昧さは、必ず – scaisEdge

+0

解決(http://stackoverflow.com/ help/someone-answers)(また、潜在的にそれらをupvote)StackOverflowの質問をするとき。人々は将来の質問に答えようとは思わないかもしれません。 –

+0

あなたが気づいているエラーを投稿してください –

答えて

1

スーパー参考になると思いますCASEステートメント(hoursとも呼ばれます)。名前の衝突を避けるために2番目の名前を変更してください。その後、

SELECT 
    ... 
    hours,    <-- first 'hours' 
    ... 
    CASE 
    WHEN state = 'Closed' 
    THEN sum(hours) 
    ELSE hours 
    END AS hours  <-- second 'hours' 
関連する問題