我目前正在處理一個 Access 資料庫,我想做一個可以將多行合并為一行的查詢,但將所有條目分隔在不同的列中。
我正在查詢的表稱為“每月”,用于活動的月度報告,并以這種方式制作:
| 專案 | 日期 | 周轉 | 利潤 |
|---|---|---|---|
| 0001 | 01/01/2021 | 10000 | 20% |
| 0001 | 01/02/2021 | 10500 | 15% |
| 0002 | 01/01/2021 | 8500 | 25% |
我想知道是否有辦法將其轉換為:
| 專案 | 日期 | 周轉 | 利潤 | 日期 | 周轉 | 利潤 |
|---|---|---|---|---|---|---|
| 0001 | 01/01/2021 | 10000 | 20% | 01/02/2021 | 10500 | 15% |
| 0002 | 01/01/2021 | 8500 | 25% | 01/02/2021 |
我首先想到使用GROUP BY,但它顯然沒有適應。
目標是根據 SQL 請求對其進行格式化,而不是修改結構/資料的存盤方式。
預先感謝任何回答的人。
uj5u.com熱心網友回復:
如果它不存在,請將自動編號欄位添加到表中。
考慮:
查詢 1:
SELECT ID, project, [date] AS Data, "D" AS Cat FROM ProjectData
UNION SELECT ID, project, turnover, "T" FROM ProjectData
UNION SELECT ID, project, margin, "M" FROM ProjectData;
查詢2:
TRANSFORM First(Query1.Data) AS FirstOfData
SELECT Query1.project
FROM Query1
GROUP BY Query1.project
PIVOT DCount("*","ProjectData","Project='" & [Project] & "' AND ID<" & [ID]) 1 & [Cat];
假設這將是一個多年的資料庫,因此可能需要一些過濾條件來將選擇限制為一年。
MS Access 中的類似示例Pivot 查詢
有關 CROSSTAB 查詢的更多資訊,請查看http://allenbrowne.com/ser-67.html
或模擬 CROSSTAB(例如 2 個月):
SELECT ProjectData.project,
Max(IIf(Month([date])=1,[Date],Null)) AS Jan, Max(IIf(Month([date])=1,[Margin],Null)) AS JanMargin, Max(IIf(Month([date])=1,[turnover],Null)) AS JanTurnover,
Max(IIf(Month([date])=2,[Date],Null)) AS Feb, Max(IIf(Month([date])=2,[Margin],Null)) AS FebMargin, Max(IIf(Month([date])=2,[turnover],Null)) AS FebTurnover
FROM ProjectData
GROUP BY ProjectData.project;
不應使用保留字作為名稱。日期是保留字。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/392394.html
