来自两个表的SQL总和和组值
我正试图根据卖家的名字对销售数据进行分组。该名称在另一个表中可用。我的桌子是这样的:来自两个表的SQL总和和组值,sql,Sql,我正试图根据卖家的名字对销售数据进行分组。该名称在另一个表中可用。我的桌子是这样的: SELECT t.seller,sum(s.amount) FROM invoiceRow s join InvoiceHead t ON s.invoiceNr = t.invoiceNr WHERE t.date between '01-01-2016' and '31-01-2016' group by t.seller 发票行: +-----------+----------+-----+----
SELECT t.seller,sum(s.amount)
FROM invoiceRow s join InvoiceHead t
ON s.invoiceNr = t.invoiceNr
WHERE t.date between '01-01-2016' and '31-01-2016'
group by t.seller
发票行:
+-----------+----------+-----+----------+
| InvoiceNr | Title | Row | Amount |
+-----------+----------+-----+----------+
| 1 | Chair | 1 | 2000.00 |
| 2 | Sofa | 1 | 1500.00 |
| 2 | Cushion | 2 | 2000.00 |
| 3 | Lamp | 1 | 6500.00 |
| 4 | Table | 1 | -500.00 |
+-----------+----------+-----+----------+
+-----------+----------+------------+
| InvoiceNr | Seller | Date |
+-----------+----------+------------+
| 1 | Adam | 2016-01-01 |
| 2 | Lisa | 2016-01-04 |
| 3 | Adam | 2016-01-08 |
| 4 | Carl | 2016-01-17 |
+-----------+----------+------------+
SELECT SUM(Amount)
FROM InvoiceRow
WHERE InvoiceNr IN (
SELECT InvoiceNr
FROM InvoiceHead
WHERE Date >= '2016-01-01' AND Date < '2016-02-01'
)
+----------+------------+
| Seller | Amount |
+----------+------------+
| Adam | 8500.00 |
| Lisa | 3500.00 |
| Carl | -500.00 |
+----------+------------+
发票抬头:
+-----------+----------+-----+----------+
| InvoiceNr | Title | Row | Amount |
+-----------+----------+-----+----------+
| 1 | Chair | 1 | 2000.00 |
| 2 | Sofa | 1 | 1500.00 |
| 2 | Cushion | 2 | 2000.00 |
| 3 | Lamp | 1 | 6500.00 |
| 4 | Table | 1 | -500.00 |
+-----------+----------+-----+----------+
+-----------+----------+------------+
| InvoiceNr | Seller | Date |
+-----------+----------+------------+
| 1 | Adam | 2016-01-01 |
| 2 | Lisa | 2016-01-04 |
| 3 | Adam | 2016-01-08 |
| 4 | Carl | 2016-01-17 |
+-----------+----------+------------+
SELECT SUM(Amount)
FROM InvoiceRow
WHERE InvoiceNr IN (
SELECT InvoiceNr
FROM InvoiceHead
WHERE Date >= '2016-01-01' AND Date < '2016-02-01'
)
+----------+------------+
| Seller | Amount |
+----------+------------+
| Adam | 8500.00 |
| Lisa | 3500.00 |
| Carl | -500.00 |
+----------+------------+
我当前处理的查询如下所示:
+-----------+----------+-----+----------+
| InvoiceNr | Title | Row | Amount |
+-----------+----------+-----+----------+
| 1 | Chair | 1 | 2000.00 |
| 2 | Sofa | 1 | 1500.00 |
| 2 | Cushion | 2 | 2000.00 |
| 3 | Lamp | 1 | 6500.00 |
| 4 | Table | 1 | -500.00 |
+-----------+----------+-----+----------+
+-----------+----------+------------+
| InvoiceNr | Seller | Date |
+-----------+----------+------------+
| 1 | Adam | 2016-01-01 |
| 2 | Lisa | 2016-01-04 |
| 3 | Adam | 2016-01-08 |
| 4 | Carl | 2016-01-17 |
+-----------+----------+------------+
SELECT SUM(Amount)
FROM InvoiceRow
WHERE InvoiceNr IN (
SELECT InvoiceNr
FROM InvoiceHead
WHERE Date >= '2016-01-01' AND Date < '2016-02-01'
)
+----------+------------+
| Seller | Amount |
+----------+------------+
| Adam | 8500.00 |
| Lisa | 3500.00 |
| Carl | -500.00 |
+----------+------------+
在那之后,甚至可能按月份分组(但这不是这个问题的一部分,我希望如果我解决了这个问题,我能找出答案)
我尝试过各种类型的联接,但是我最终得到了很多重复的联接,我不知道如何同时求和和和分组。有人知道怎么做吗?试试这个
SELECT seller, SUM(amount) FROM InvoiceRow
JOIN InvoiceHead
ON InvoiceRow.InvoiceNr = InvoiceHead.InvoiceNr
GROUP BY InvoiceHead.seller;
或者如果你想在两次约会之间。试试这个
SELECT seller, SUM(amount) FROM InvoiceRow
JOIN InvoiceHead
ON InvoiceRow.InvoiceNr = InvoiceHead.InvoiceNr
WHERE InvoiceHead.Date >= '2016-01-01' AND InvoiceHead.Date < '2016-02-01'
GROUP BY InvoiceHead.seller;
从发票行中选择卖方金额
连接发票头
在InvoiceRow.InvoiceNr=InvoiceHead.InvoiceNr上
其中发票抬头日期>='2016-01-01'和发票抬头日期<'2016-02-01'
按发票头、卖方分组;
您只需加入表,根据需要按日期筛选结果,然后进行分组:
select
H.Seller,
sum(R.Amount) as Amount
from InvoiceHead as H
left outer join InvoiceRow as R on R.InvoiceNr = H.InvoiceNr
where H. Date >= '2016-01-01' AND H.Date < '2016-02-01'
group by H.Seller
选择
H.卖方,
金额(R.金额)作为金额
从发票抬头为H
左外部联接发票行作为R在R.InvoiceNr=H.InvoiceNr上的R
其中H.日期>='2016-01-01'和H.日期<'2016-02-01'
H.卖方集团
你应该总结一下。如果需要日期范围,可以在ON子句之后添加where子句,并按如下方式筛选日期:
SELECT t.seller,sum(s.amount)
FROM invoiceRow s join InvoiceHead t
ON s.invoiceNr = t.invoiceNr
WHERE t.date between '01-01-2016' and '31-01-2016'
group by t.seller
您可以尝试一次:
SELECT ih.Seller,
(
SELECT SUM(Amount) FROM invoicerow ir
INNER JOIN invoicehead ih1
ON (ir.InvoiceNr = ih1.InvoiceNr)
WHERE ih1.Seller = ih.Seller
) AS Amount
FROM invoicehead ih
GROUP BY ih.Seller
这是一个非常基本的
join
查询groupby
查询。您应该尝试在InvoiceNr
字段中加入-另外,在WHERE InvoiceNr中,也选择Seller字段,然后groupby
Wow,5分钟内回复3次。我遵循了你的语法,因为它接近于我的语法。我遇到的一个问题是,加入后的总金额与加入前有所不同。有点不对劲,我感觉连接创建了重复项,这些重复项沿着其他行求和,从而增加了数量。也就是说,如果我使用原始查询并将总和值与联接和组后得到的值进行比较,则它们不匹配。我想说的是,每个卖家的数量并不等于我加入和分组之前得到的数量。