2017-01-06 41 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)