我正在爲現有軟件(Atlassian Jira)構建SQL QUERY,並且無法對數據庫進行任何更改。需要sub sql select的總和,但需要sub select中的變量
我們在Jira(表:jiraissue)中有幾個問題,它們在單獨的表(表:worklog)中有0到n個工作日誌條目。每個工作日誌還包含記錄工作的用戶的用戶標識,並且用戶是一個或多個用戶組的成員。這些問題中的每一個(表格:jiraissue)都與另一個問題相關聯(在另一個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。
最好的問候, 斯特凡
我會首先推薦使用一幫** (子)視圖**和有意義的名稱來簡化語句的怪物(除非你有某種嚴格的規則限制你不這樣做)。僅僅理解你正在做的事情是完全不夠的(絕對沒有諷刺),並且遵循括號不會使這個任務變得更容易。 –
或者創建一個[Sql小提琴](http://sqlfiddle.com/)的例子,我們可以玩 – DMK