SQLserver查看第一次跟最后一次的数量(qty)和销售额(moneys),qty和moneys在表ar_invoicelist中,日期(fidate)在表ar_invoice 中,结果按ar_invoicelist表中的sprc汇总
时间: 2024-12-12 08:30:33 浏览: 12
在SQL Server中,你可以使用联合查询(JOIN)、聚合函数(GROUP BY)以及子查询来获取所需信息。首先,你需要确保两个表`ar_invoicelist`和`ar_invoice`通过日期关联起来。这里是一个示例查询:
```sql
SELECT ai.sprc,
MIN(ali.qty) AS 最初数量,
MAX(ali.qty) AS 最后数量,
SUM(ali.moneys) AS 总销售额
FROM ar_invoicelist ai
JOIN (
SELECT fidate, MAX(qty) as qty, moneys
FROM ar_invoicelist
GROUP BY fidate
) ali ON ai.fidate = ali.fidate
GROUP BY ai.sprc;
```
这个查询做了以下几步操作:
1. 使用JOIN将`ar_invoicelist`和子查询(查找每个日期的最大`qty`和`moneys`)连接起来。
2. 对每个`sprc`,找出对应的最小`qty`(即首次数量)和最大`qty`(即最后数量)。
3. 计算每个`sprc`下的总销售额。
相关问题
SQLserver查看第一次跟最后一次的数量(qty)和销售额(moneys),qty和moneys在表ar_invoicelist中,日期(fidate)在表ar_invoice 中
要在SQL Server中查询`ar_invoicelist`表中的首次和最后的销售记录,以及每个记录的`qty`(数量)和`moneys`(销售额),同时关联到`ar_invoice`表中的`fdate`(日期),你可以使用窗口函数(ROW_NUMBER() OVER和RANK() OVER)来确定每条记录的序号并筛选出首次和最后一次。假设`ar_invoicelist`中的ID字段可以作为连接条件,这里是查询的基本结构:
```sql
SELECT
al.*,
i.fdate AS first_date,
MIN(i.moneys) AS first_moneys,
MAX(i.moneys) AS last_moneys
FROM
ar_invoicelist al
JOIN
(
SELECT
ID, fdate, moneys,
ROW_NUMBER() OVER (PARTITION BY ID ORDER BY fdate ASC) AS row_num
FROM ar_invoice
) i ON al.ID = i.ID
GROUP BY
al.*, i.fdate
HAVING
row_num = 1 OR row_num = (
SELECT MAX(row_num)
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY fdate DESC) AS row_num
FROM ar_invoice
WHERE ID = al.ID
) subquery
)
```
这个查询首先通过`JOIN`将两个表关联起来,然后使用窗口函数`ROW_NUMBER()`对每个`ID`下的`fdate`进行排序。在外部查询中,我们选择`row_num = 1`的行获取首次记录,`row_num = MAX(row_num)`的行获取最后一次记录。
SQL server 用ROW_NUMBER() 函数查看第一次和最后一次的数量(qty)和销售额(moneys)
SQL Server 的 `ROW_NUMBER()` 函数通常用于对数据集进行分组并分配行序号,但它本身并不直接用于计算次数或特定值的范围,比如首次和最后的 `qty` 和 `moneys`。不过,你可以结合其他窗口函数如 `MIN()` 和 `MAX()` 来实现这个需求。
假设你有一个名为 `Sales` 的表,包含字段 `OrderID`, `ProductID`, `Qty`, 和 `Money`,你可以编写这样的查询:
```sql
WITH Sales_Ranked AS (
SELECT
OrderID,
ProductID,
Qty,
Money,
ROW_NUMBER() OVER(PARTITION BY ProductID ORDER BY OrderID) as RowNum
FROM Sales
)
SELECT
ProductID,
MIN(Qty) as FirstQty,
MAX(Qty) as LastQty,
MIN(Money) as FirstMoney,
MAX(Money) as LastMoney
FROM Sales_Ranked
GROUP BY ProductID
ORDER BY ProductID;
```
这个查询首先按 `ProductID` 分区,并根据 `OrderID` 排序(理论上最早和最晚的订单)。然后在每个分区中找到 `Qty` 和 `Money` 的最小值(代表第一次)和最大值(代表最后一次)。结果将按 `ProductID` 排列。
阅读全文