我在資料庫中有一個表,其中存盤了金額、它們各自的“發票日期”以及這些發票日期所屬的合同年份。
有年度、半年度、季度和月度合同的客戶。因此,一年內可以有多張發票 - 因此該列定義了發票所屬的年份。
它看起來類似于:
| 合約編號 | 發票編號 | 發票日期 | 數量 | 年指數 |
|---|---|---|---|---|
| 1 | 1 | 01/01/2019 | 100 | 1 |
| 1 | 2 | 01/06/2019 | 100 | 1 |
| 1 | 3 | 01/01/2020 | 100 | 2 |
| 1 | 4 | 01/06/2020 | 100 | 2 |
| 2 | 1 | 01/03/2020 | 200 | 1 |
| 2 | 2 | 01/03/2020 | 200 | 2 |
| 2 | 3 | 01/03/2021 | 200 | 3 |
| 3 | 1 | 01/01/2020 | 300 | 1 |
| 3 | 2 | 01/04/2020 | 300 | 1 |
| 3 | 3 | 01/07/2020 | 300 | 1 |
| 3 | 4 | 01/10/2020 | 300 | 1 |
理想情況下,我想運行一個查詢,在那里我可以看到每個合同金額的總和,按年份索引分組,例如
| 合約編號 | 年1金額 | 年2金額 | 年3金額 |
|---|---|---|---|
| 1 | 200 | 200 | 空值 |
| 2 | 200 | 200 | 200 |
| 3 | 1200 | 空值 | 空值 |
這可能來自單個查詢嗎?或者這需要加入多個?
關于可用的語法,我正在使用 Microsoft Access。
預先感謝您的任何幫助。
uj5u.com熱心網友回復:
這是一般的模式。您可以根據需要切換 Access 和 Null 與 0 的語法。
SELECT ContractID,
SUM(CASE WHEN YearIndex = 1 THEN Amount ELSE 0 END) AS Year1Amount,
SUM(CASE WHEN YearIndex = 2 THEN Amount ELSE 0 END) AS Year2Amount,
...
SUM(CASE WHEN YearIndex = N THEN Amount ELSE 0 END) AS YearNAmount
FROM SOME_TABLE
GROUP
BY ContactID
uj5u.com熱心網友回復:
資料庫不想在并排顯示中為您提供總和......并且您將創建很多復雜性來實作這一目標
什么是現成的:
groupID groupYear sumAmount
專門使用 Access one 使用稱為聚合查詢的常見功能,您可以在線找到教程
uj5u.com熱心網友回復:
只是想補充一點,Microsoft access 不支持 CASE 陳述句,僅支持 IIF 陳述句,但是,IIF 陳述句不允許在其中使用聚合函式。所以答案最終是以下訪問:
SELECT
DISTINCT (ContractInvoiceInfo.ContractID),
Y1.Y1Amount,
Y2.Y2Amount,
Y3.Y3Amount,
Y4.Y4Amount,
Y5.Y5Amount
FROM
ContractInvoiceInfo INNER JOIN (
(
SELECT ContractID, SUM(Amount) AS Y1Amount
FROM ContractInvoiceInfo
WHERE YearIndex = 1
GROUP BY ContractID
) AS Y1 LEFT JOIN (
(
SELECT ContractID, SUM(Amount) AS Y2Amount
FROM ContractInvoiceInfo
WHERE YearIndex = 2
GROUP BY ContractID
) AS Y2 LEFT JOIN (
(
SELECT ContractID, SUM(Amount) AS Y3Amount
FROM ContractInvoiceInfo
WHERE YearIndex = 3
GROUP BY ContractID
) AS Y3 LEFT JOIN (
(
SELECT ContractID, SUM(Amount) AS Y4Amount
FROM ContractInvoiceInfo
WHERE YearIndex = 4
GROUP BY ContractID
) AS Y4 LEFT JOIN (
SELECT ContractID, SUM(Amount) AS Y5Amount
FROM ContractInvoiceInfo
WHERE YearIndex = 5
GROUP BY ContractID
) AS Y5
ON Y5.ContractID = Y4.ContractID)
ON Y4.ContractID = Y3.ContractID)
ON Y3.ContractID = Y2.ContractID)
ON Y2.ContractID = Y1.ContractID)
ON Y1.ContractID = ContractInvoiceInfo.ContractID
ORDER BY
ContractInvoiceInfo.ContractID;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/338769.html
上一篇:如何在ACCESS中使用不同的WHERE條件更新表的一個欄位(在單個查詢中)
下一篇:將動態交叉表更新為固定表
