【发布时间】:2021-06-12 16:21:38
【问题描述】:
我正在尝试编写一个 SQL 语句,该语句应该为一年中的每一周提供一行,其中包含该周的发票总额以及所有价格的总和。
发票数据存储在 2 个表中:1 个用于发票,1 个用于每个发票的数据。它看起来像这样(简化):
发票:
Id | inv_date |
---+------------|
11 | 2021-03-01 |
12 | 2021-03-01 |
13 | 2021-03-01 |
14 | 2021-03-02 |
...
发票位置:
Invoice_Id | position | article_no | amount | price |
-----------+----------+------------+--------+--------|
11 | 1 | 12345 | 1 | 12.95 |
12 | 1 | 23456 | 1 | 22.99 |
12 | 2 | 23457 | 5 | 3.95 |
13 | 1 | 12345 | 2 | 12.95 |
14 | 1 | 98765 | 1 | 199.95 |
...
所以我的目标是这样的:
year | week | amount_invoices | sales_total|
-----+------+-----------------+------------|
2020 | 51 | 100 | 4500.91 |
2020 | 52 | 90 | 4200.50 |
2020 | 53 | 85 | 4155.55 |
2021 | 1 | 88 | 4280.81 |
2021 | 2 | 105 | 4812.85 |
2021 | 3 | 112 | 4722.94 |
...
我不是 SQL 专家,所以到目前为止,我所拼凑的只是获取所有年份和每个星期的列表。我还尝试包括发票金额和总销售额,但是这 2 列以我的方式返回错误值……发票金额太高,销售额也下降了。 我当前的 SQL 如下所示:
SELECT
DATEPART(year, i.inv_date) as year,
DATEPART(week, i.inv_date) as week,
COUNT(i.id) as amount_invoices,
SUM(p.price) as sales_total
FROM
invoices i
JOIN
invoice_positions p ON i.id = p.invoice_id
GROUP BY
DATEPART(week, i.inv_date), DATEPART(year, i.inv_date)
ORDER BY
year DESC, week DESC
如果有人能指出我正确的方向,那就太好了!
【问题讨论】:
-
用您正在使用的数据库标记您的问题。
标签: sql function date join group-by