2017-01-06 44 views
2

我在下面提出了两条我想加入的SQL语句,它们都单独工作得很好,但当试图连接它们时,我没有得到我期待的结果。我将解释我正在使用的3个表格,并将代码放在下面。将两个表连接到一个的SQL

有3个表stoctran股票部门。我们从部门开始,它包含一个部门和一个描述(例如:01,'Food')。然后是股票表,其中包含代码,说明,部门(代码),一手(在sotre中的项目数量)和avrgcost(产品的平均成本)。然后最后有stoctran此表具有每个产品在其中的每个销售,它的领域如下:项目代码(与股票相同),tcode(区分发票和信用票据的代码),金额(该项目收取的金额),成本(该项目的成本),部门(项目所在部门)和txdate(产品销售日期)。

正如你可以在代码中看到的,我的第一条SQL语句计算某个日期('2017-01-01'和当前日期)之间的nettsales和nettcost,并将它分组为部门并使用部门表提供其旁边部门的描述。然后,第二个SQL语句使用(onhand * avrgcost)对总库存值进行归纳,并将其分组到一个部门中,该部门也使用部门表在列中添加其描述。

现在我的问题是如何加入这两个SQL语句的方式,使第一个语句中的所有列都包含每个部门的总库存值。所以基本上把第二条语句的第二列添加到第一条语句列中。

净销售额和净成本每部(首)

SELECT 
    a.DEPARTMENT, 
    b.DESCRIPTIO, 
    ROUND(SUM(IF(a.TCODE = 'IN', a.AMOUNT, 0)) - 
     SUM(IF(a.TCODE = 'CN', a.AMOUNT, 0)), 2) As NettSales, 
    ROUND(Sum(If(a.TCODE = 'IN', a.COST, 0)) - Sum(If(a.TCODE = 'CN', a.COST, 0)) As NettCost 
FROM 
    stoctran a 
LEFT JOIN 
    department b ON a.DEPARTMENT = b.DEPARTMENT 
WHERE 
    a.TXDATE BETWEEN ;2017-01-01' And current_date 
GROUP BY 
    a.DEPARTMENT 

持股每Departmnet(第二)

SELECT 
    a.DEPARTMENT, 
    SUM(a.AVRGCOST * a.ONHAND) As StockValue 
FROM 
    stock a 
LEFT JOIN 
    department b On a.DEPARTMENT = b.DEPARTMENT 
GROUP BY 
    a.DEPARTMENT 
+3

我删除了不兼容的数据库标签。请仅使用您实际使用的数据库进行标记。 –

回答

0
select net.*, stock.StockValue 
    from (SELECT a.DEPARTMENT, 
       b.DESCRIPTIO, 
       ROUND(SUM(IF(a.TCODE = 'IN', a.AMOUNT, 0)) - 
       SUM(IF(a.TCODE = 'CN', a.AMOUNT, 0)), 2) As NettSales, 
       ROUND(Sum(If(a.TCODE = 'IN', a.COST, 0)) - Sum(If(a.TCODE = 'CN', a.COST, 0)) As NettCost 
      FROM stoctran a 
      LEFT JOIN department b ON a.DEPARTMENT = b.DEPARTMENT 
     WHERE a.TXDATE BETWEEN '2017-01-01' And current_date 
     GROUP BY a.DEPARTMENT) net 
    join (SELECT a.DEPARTMENT, 
       SUM(a.AVRGCOST * a.ONHAND) As StockValue 
      FROM stock a 
      LEFT JOIN department b On a.DEPARTMENT = b.DEPARTMENT 
     GROUP BY a.DEPARTMENT) stock 
    on (stock.department=net.department)