簡體   English   中英

Group by 月度數據查詢

[英]Monthly Data Query With Group by

我有帶有字段 id、部門、日期和金額的表格訂單。 我想要查詢返回部門總交易和總金額的最近 3 個月或 6 個月的記錄。 如果任何一個月都沒有交易,我希望 0 作為總交易和金額。

我嘗試了幾個查詢,但我無法生成 output 因為我想要兩組。

這是我嘗試過的東西。

Select SUM(ISNULL(od.Amount,0)) as Points, Count(ISNULL(od.OrderId,0)) as Transactions,
DATEPART(MONTH, od.OrderDate) as Month, max(DeptId)
from POR_OrderDetails od
where 
cast(od.OrderDate as date) BETWEEN cast(dateadd(month, -3, GETDATE()) as date) and cast(getdate() as date) 
group by DATEPART(YEAR, od.OrderDate),DATEPART(MONTH, od.OrderDate), od.DeptId

測試數據

+---------+--------+--------+-----------+
| OrderId | Amount | DeptId | OrderDate |
+---------+--------+--------+-----------+
| 1       | 10     | 1      | 15/3/2020 |
+---------+--------+--------+-----------+
| 2       | 10     | 3      | 1/3/2020  |
|         |        |        |           |
+---------+--------+--------+-----------+
| 3       | 10     | 2      | 25/2/2020 |
+---------+--------+--------+-----------+
| 4       | 20     | 1      | 1/2/2020  |
+---------+--------+--------+-----------+

預計 Output

+-------+-------------+-------------------+--------+
| Month | TotalAmount | TotalTransactions | DeptId |
+-------+-------------+-------------------+--------+
| 1     | 0           | 0                 | 1      |
+-------+-------------+-------------------+--------+
| 1     | 0           | 0                 | 2      |
+-------+-------------+-------------------+--------+
| 1     | 0           | 0                 | 3      |
+-------+-------------+-------------------+--------+
| 2     | 20          | 1                 | 1      |
+-------+-------------+-------------------+--------+
| 2     | 10          | 1                 | 2      |
+-------+-------------+-------------------+--------+
| 2     | 0           | 0                 | 3      |
+-------+-------------+-------------------+--------+
| 3     | 10          | 1                 | 1      |
+-------+-------------+-------------------+--------+
| 3     | 0           | 0                 | 2      |
+-------+-------------+-------------------+--------+
| 3     | 10          | 1                 | 3      |
+-------+-------------+-------------------+--------+

首先,我建議創建一個Calendar Table ,因為它在這里會有所幫助,而且它們對於任何實例都是非常寶貴的補充。

設置完成后,就像將部門表(我假設你有)交叉連接到日歷表一樣簡單,然后對部門訂單表進行LEFT JOIN連接。 所以是這樣的:

SELECT C.MonthNo,
       SUM(DOAmount) AS TotalAmount,
       COUNT(DOOrderID) AS TotalTransactions,
       D.DeptID
FROM dbo.Department D
     CROSS JOIN dbo.Calendar C
     LEFT JOIN dbo.DepartmentOrder DO ON D.DeptID = DO.DeptID
                                     AND C.CalendarDate = DO.OrderDate
WHERE C.CalendarDate >= '20200101'
  AND C.CalendarDate < '20200401'
GROUP BY C.MonthNo,
         D.DeptID
ORDER BY C.MonthNo,
         D.DeptID;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM