2016-10-31 8 views
0

Ich habe diese Aussage unten. Wenn ich es in BigQuery ausführe, erhalte ich einen Fehler, der besagt, dass Stunden ein mehrdeutiger Spaltenname ist. Ich bin mir ziemlich sicher, dass ich nur angeben muss, von welcher Tabelle ich Stunden bekomme (hours.icxmedia-servers: icx_metrics.issues_and_zenhub), aber wenn ich das mache und gruppiere, sagt BigQuery, dass es eine ungültige Gruppe ist durch. Ich glaube, ich bin in der Nähe, aber ich bin fest und irgendwelche Vorschläge werden von der Super hilfreichMehrdeutiger Spaltenname in 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

dann eine qualifizierte Spalten Namen verwenden .. die Tabelle alias zu den Spalten Thar hinzufügen haben den gleichen Namen .für die Mehrdeutigkeit aufzulösen – scaisEdge

+0

Achten Sie darauf, [Mark Antworten als angenommen] (http://stackoverflow.com/ help/someone-answers) (und möglicherweise auch sie upvote), wenn Sie Fragen zu StackOverflow stellen. Menschen sind möglicherweise nicht motiviert, zukünftige Fragen anders zu beantworten. –

+0

Veröffentlichen Sie den Fehler, den Sie bekommen, bitte –

Antwort

1

Sie haben zwei Felder hours in einer einzigen SELECT genannt, ist eine Pass-Through-hours Felder und eine andere ist ein Feld, berechnet in CASE-Anweisung, die auch hours heißt. Benennen Sie die zweite um, um Namenskollisionen zu vermeiden.

SELECT 
    ... 
    hours,    <-- first 'hours' 
    ... 
    CASE 
    WHEN state = 'Closed' 
    THEN sum(hours) 
    ELSE hours 
    END AS hours  <-- second 'hours' 
Verwandte Themen