我有这样的问题:我想连接三个表,以获得一些值,例如。
Sellers
IDSELLERS
NAMESELLER
STOCK
IDSTOCK
QTYSTOCK
COST
FKSELLER
SELL
IDSELL
QTYSELL
PRICE
FKSELLER
我想求出总金额 STOCK
和 SELL
每个卖家的表格
U have tried with the following query but it doubles the values for each sell:
select
SELLERS.NAMESELLER,
SUM(STOCK.QTY*STOCK.COST)AS STOCKS,
SUM(SELL.QTY*SELL.PRICE) AS SELLS
FROM
SELLERS
LEFT JOIN STOCK ON STOCK.FKSELLER=SELLERS.IDSELLER
LEFT JOIN SELL ON SELL.FKSELLER=SELLERS.IDSELLERS
GROUP BY
SELLERS.NAMESELLER
the firebirdsql release in use is the 2. 1.
先谢谢你了。
问题是,如果你有例如2行在 出售 和2行 库存. 第一次连接会产生两行,第二次连接会产生2*2行。相反,你应该将数据联合起来,然后连接一次,或者使用选择表达式来产生总和。
使用选择表达式。
select
SELLERS.NAMESELLER,
(select sum(STOCK.QTY * STOCK.COST)
from STOCK where STOCK.FKSELLER=SELLERS.IDSELLER) AS STOCKS,
(select sum(SELL.QTY * SELL.PRICE)
from SELL where SELL.FKSELLER=SELLERS.IDSELLERS) AS SELLS
from SELLERS
使用联合。
select
SELLERS.NAMESELLER,
sum(stocksell.STOCKQTY * stocksell.STOCKCOST) AS STOCKS,
sum(stocksell.SELLQTY * stocksell.SELLPRICE) AS SELLS
from SELLERS
left join (
select FKSELLER, QTY AS STOCKQTY, COST AS STOCKCOST,
0 AS SELLQTY, 0 AS SELLPRICE
from STOCK
union all
select FKSELLER, 0 AS STOCKQTY, 0 AS STOCKCOST,
QTY AS SELLQTY, PRICE AS SELLPRICE
from SELL
) stocksell
ON stocksell.FKSELLER=SELLERS.IDSELLER
group by SELLERS.NAMESELLER