2012-12-06 74 views
2

我正在爲現有軟件(Atlassian Jira)構建SQL QUERY,並且無法對數據庫進行任何更改。需要sub sql select的總和,但需要sub select中的變量

我們在Jira(表:jiraissue)中有幾個問題,它們在單獨的表(表:worklog)中有0到n個工作日誌條目。每個工作日誌還包含記錄工作的用戶的用戶標識,並且用戶是一個或多個用戶組的成員。這些問題中的每一個(表格:jir​​aissue)都與另一個問題相關聯(在另一個jira項目中,但我認爲 - 與非jira專家無關),這些核心問題被稱爲「成本單位」。

表示我們想知道每個「成本單位」上記錄了多少工作。因此我們需要查詢返回鏈接問題上所有「成本單位」和每個用戶組記錄的時間。最後一點是,「成本單位」是具有知道哪些「成本單位」屬於一個組成部分的市場。因此只顯示與報告用戶相關的「成本單位」,查詢使用該組件選擇此項。

我到目前爲止發現的效果很好,但返回的「成本單位」的行數與鏈接的問題相同,但我需要所有鏈接問題的總和。

我不知何故應該能夠總結子查詢的所有結果,但這些似乎是不可能的。我也嘗試在FROM之後使用子查詢語句,但後來我無法使用jiraissue.id。

這裏是我的實際查詢:

SELECT 
    myktr.pkey, 
    myktr.summary, 
    sum(worklog_dev), 
    (SELECT 
    sum(worklog.timeworked) 
    from 
    worklog 
    WHERE worklog.issueid = jiraissue.id 
    AND worklog.author IN 
    (SELECT 
     child_name 
    FROM 
     CWD_MEMBERSHIP 
    where lower_parent_name = 'jira-team-sdqm')) AS worklog_sdqm, 
    (SELECT 
    sum(worklog.timeworked) 
    from 
    worklog 
    WHERE worklog.issueid = jiraissue.id 
    AND worklog.author IN 
    (SELECT 
     child_name 
    FROM 
     CWD_MEMBERSHIP 
    where lower_parent_name = 'jira-productowner')) AS worklog_pm 
FROM 
    component, 
    nodeassociation, 
    jiraissue AS myktr 
    INNER JOIN issuelink 
    ON (issuelink.source = myktr.id) 
    INNER JOIN jiraissue 
    ON (
     issuelink.destination = jiraissue.id 
    ), 
    (SELECT 
    sum(worklog.timeworked) AS worklog_dev 
    FROM 
    worklog 
    WHERE worklog.issueid = jiraissue.id 
    AND worklog.author IN 
    (SELECT 
     child_name 
    FROM 
     CWD_MEMBERSHIP 
    where lower_parent_name = 'jira-developers')) AS worklog_dev_table 
WHERE myktr.pkey IN 
    (SELECT 
    jiraissue.pkey 
    from 
    jiraissue, 
    project 
    WHERE project.id = jiraissue.project 
    AND project.pkey = 'KTR') 
    AND component.ID = nodeassociation.SINK_NODE_ID 
    and myktr.id = nodeassociation.SOURCE_NODE_ID 
    and nodeassociation.ASSOCIATION_TYPE = 'IssueComponent' 
    and component.cname = 'Project-Component' ; 

你有沒有給我什麼建議? fyi:我們正在使用postgreSQL。

最好的問候, 斯特凡

+1

我會首先推薦使用一幫** (子)視圖**和有意義的名稱來簡化語句的怪物(除非你有某種嚴格的規則限制你不這樣做)。僅僅理解你正在做的事情是完全不夠的(絕對沒有諷刺),並且遵循括號不會使這個任務變得更容易。 –

+0

或者創建一個[Sql小提琴](http://sqlfiddle.com/)的例子,我們可以玩 – DMK

回答

1

爲聚合才能正常工作,您將需要使用GROUP BY -clause在主選擇:

... 
GROUP BY component 
...