您沒有提供樣本數據,甚至沒有提供gh你的數據庫模式的答案來提供你需要的確切的SQL。
您不描述發票或訂單表。我必須假設他們包含一個ProjectID屬性。
你可以使用子查詢:
http://www.techrepublic.com/article/use-sql-subselects-to-consolidate-queries/1045787/ https://msdn.microsoft.com/en-us/library/ff487138.aspx
你選擇威力變成類似(未經測試):
SELECT
project.projectID,
project.project_title,
project.end_date,
project.project_manager,
project_status.project_status,
(SELECT sum(invoice.invoice_net) FROM invoice WHERE invoice.projectID = project.projectID),
(SELECT sum(order.total_order) FROM order WHERE order.projectID = project.projectID)
FROM project
LEFT JOIN project_status
ON project.project_statusID=project_status.project_statusID
WHERE project.project_statusID BETWEEN 1 AND 12
或一組由聯接。請參閱:
SQL JOIN, GROUP BY on three tables to get totals
您將通過有組中的所有非聚合(通常這將是你從你的項目表中選擇所有字段),然後應用聚合函數(SUM)到您的詳細信息屬性(invoice_net和total_order)。
像這樣(未經):
SELECT
project.projectID,
project.project_title,
project.end_date,
project.project_manager,
project_status.project_status,
sum(invoice.invoice_net),
sum(order.total_order)
FROM project
LEFT JOIN project_status
ON project.project_statusID=project_status.project_statusID
LEFT JOIN invoice
ON project.projectID = invoice.projectID
LEFT JOIN order
ON project.projectID = order.projectID
WHERE project.project_statusID BETWEEN 1 AND 12
GROUP BY project.projectID, project.project_title, project.end_date,
project.project_manager, project_status.project_status
選擇哪一個?性能應該與具有可比性,但是查詢優化器中的弱點可能會導致優先於其他優先級。測試性能如果這很重要。
對於一次性,如果連接表的視圖不存在,我可能會使用子查詢。但是在實踐中,一個視圖確實存在或者應該存在,在這種情況下,使用GROUP BY(或者創建視圖,如果需要的話)是非常自然的。
所以真正的答案就(未經測試):
CREATE VIEW project_order_invoice AS
SELECT
project.projectID,
project.project_title,
project.end_date,
project.project_manager,
project_status.project_status,
invoice.invoice_net,
order.total_order
FROM project
LEFT JOIN project_status
ON project.project_statusID=project_status.project_statusID
LEFT JOIN invoice
ON project.projectID = invoice.projectID
LEFT JOIN order
ON project.projectID = order.projectID
SELECT
projectID,
project_title,
end_date,
project_manager,
project_status,
sum(invoice_net),
sum(total_order)
FROM project_order_invoice
WHERE project_statusID BETWEEN 1 AND 12
GROUP BY projectID, project_title, end_date,
project_manager, project_status
對於視圖,你可能會想包括來自所有表的屬性,除了只有1 ID屬性的副本。
謝謝,我會閱讀子選集。是的,兩個相關都有一個projectID字段 – JK36