2016-08-19 20 views
2

繰り返しの質問がありますが、私の問題は解決していません。MySql:2つの異なるテーブルからの2つの列の合計

私は、日付
を使用してアイテムの内向きと外向きを判断しようとしています。

  • 表1では、これを簡略にAと呼びます。私は3つの列を持つだろう すなわちA_DtA_NaA_Qty
  • 表2では、これを「B」と略します。私は3つの列、すなわちB_Dt,B_Na、B_Qty
  • を持っています。表3では、これを「C」と略します。私は すなわち3列C_DtC_NC_Qty

  • 表AおよびBが内側であり、Cが外側であるを有するであろう。
    改訂されたクエリを使用しましたが、3番目の列を追加しました。

    表例:

    Table :A 
    
        A_Dt   A_Na A_Qty 
        2016-08-01 XY  50 
        2016-08-02 XY  100 
        2016-08-05 XY  150 
    

    表B:

    B_Dt  B_Na B_Qty 
    2016-08-01 XY 150 
    2016-08-03 XY 100 
    2016-08-04 XY 200 
    

    表C:

    C_Dt  C_Na C_Qty 
    2016-08-01 XY 150 
    2016-08-03 XY 100 
    2016-08-04 XY 200 
    

    期待出力

    Date   Inward Outward 
    2016-08-01  200  150 
    2016-08-02  100  0 
    2016-08-03  100  100 
    2016-08-04  200  200 
    2016-08-05  150  0 
    

    この場合は、左結合を使用する必要があります。

    問合せ:

    select t.Dt as Date, sum(t.Qty) as Inward,sum(t.outward) as outward1 from(
        select A_Dt as Dt, A_Na as Na, A_Qty as Qty from a 
        union all 
        select B_Dt as Dt, B_Na as Na, B_Qty as Qty from b 
        union all 
        select C_Dt as Dt, C_Na as Na, C_Qty as outward from c 
    )t 
    group by t.Dt, t.Na 
    order by t.Dt; 
    

    エラー後:

    #1054 - Unknown column 't.outward' in 'field list' 
    

    任意の考えを事前にgreat.Thanksだろう。

    +1

    を必要としますが、UNIONを見ていましたか? – Strawberry

    答えて

    4

    まず、union allを使用して両方のテーブルデータを1つに結合し、次に日付とNa列による数量の合計を求めます。

    クエリ

    select t.Dt, t.Na as Inward, sum(t.Qty) as Outward from(
        select A_Dt as Dt, A_Na as Na, A_Qty as Qty from Table_A 
        union all 
        select B_Dt as Dt, B_Na as Na, B_Qty as Qty from Table_B 
    )t 
    group by t.Dt, t.Na 
    order by t.Dt; 
    

    EDIT

    実は今、表Cのデータを結合する必要がありますが、参加を使用する必要はありません。

    クエリ

    select t1.Dt, t1.Qty as Inward, coalesce(t2.C_Qty, 0) as Outward from(
        select t.Dt, t.Na, sum(t.Qty) as Qty from(
         select A_Dt as Dt, A_Na as Na, A_Qty as Qty from Table_A 
         union all 
         select B_Dt as Dt, B_Na as Na, B_Qty as Qty from Table_B 
        )t 
        group by t.Dt, t.Na 
    )t1 
    left join Table_C t2 
    on t1.Dt = t2.C_Dt 
    order by 1; 
    

    結果

    +============+========+=========+ 
    | Dt   | Inward | Outward | 
    +------------+--------+---------+ 
    | 2016-08-01 | 200 | 150  | 
    | 2016-08-02 | 100 | 0  | 
    | 2016-08-03 | 100 | 100  | 
    | 2016-08-04 | 200 | 200  | 
    | 2016-08-05 | 150 | 0  | 
    +============+========+=========+ 
    
    +0

    ありがとうございました。しかし、今私はクエリを編集しました。別の出力が必要です。そのための提案はありません。 – Soumya

    +0

    いいえ、誤解があります。私はエイリアスには「数量」、エイリアスにはアウトワードが必要です。期待される成果を参照してください。あなたはアイデアを得るでしょう。 – Soumya

    0

    あなたのクエリでは、わずかな修正

    select t.Dt as Date, sum(t.Qty) as Inward, sum(t.outward) as outward1 from(
        select A_Dt as Dt, A_Na as Na, A_Qty as Qty, 0 as outward from a 
        union all 
        select B_Dt as Dt, B_Na as Na, B_Qty as Qty, 0 as outward from b 
        union all 
        select C_Dt as Dt, C_Na as Na, 0 as Qty, C_Qty as outward from c 
    )t 
    -- where Na = 'XY' 
    group by t.Dt, t.Na 
    order by t.Dt; 
    
    +0

    よく試しましたが、うまくいきませんでした。 – Soumya

    +0

    あなたの編集後に完全に書き換えられたバージョンを見る – Serg

    関連する問題