2017-01-06 31 views
2

以下の2つのSQLステートメントを結合したいと思っています。両方とも完全に別々に動作しますが、結合しようとすると結果が得られません。私が使用している3つのテーブルについて説明し、その下にコードを記述します。2つのテーブルを1つに結合するSQL

3つのテーブルstoctran株式部門があります。 部門から始めましょう。部門と説明(例:01、 'Food')が含まれています。次に、コード、説明、部門(コード)、オンハンド(ソートの項目数)、およびavrgcost(製品の平均コスト)を含む表があります。最後にstoctranがあります。この表には、製品ごとに行われるすべての販売があり、フィールドは次のとおりです:itemcode(在庫と同じ)、tcode(請求書とクレジットノートを区別するコード)、amount費用(その項目の費用)、部門(その項目が属する部門)、およびtxdate(製品が販売された日付)のうちの1つ以上を含むことができる。

以下のコードからわかるように、私の最初のSQL文は特定の日付( '2017-01-01'と現在の日付)の間のnettsalesとnettcostを計算し、それを部門にグループ化し、その隣の部署の説明を記入してください。次に、2番目のSQL文は、(onhand * avrgcost)を使って合計株価を計算し、それを部門表にグループ化して、部門表を使用してその列の説明を列に追加します。

私の質問は、最初のステートメントのすべての列に部門ごとの合計株価を含む追加の列を与える方法で、これらの2つのSQLステートメントを結合する方法です。したがって、基本的には、2番目の文の2番目の列を取り出し、最初の文の列に追加します。 (最初の)部門毎の

売上高、純コスト

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) 
関連する問題