2017-02-15 7 views
1

enter image description here すべてのデータを一直線にする必要があります。前のselectステートメントに基づいてselectステートメントをループする方法はありますか?

私はレポートを作成する必要があり、そのために私はすべてを要約する必要があります。 だから私は最初にこのselect文を実行しました。 Query1を私はループに t1.scnすべてを取得する必要があります上記のようにように、SQL以下

QUERY2

Select t1.scn,t2.void_flg, 
MAX(case when t2.inv_num like 'VI%' then t2.inv_num end) as Vessel, 
MAX(case when t2.inv_num like 'VI%' then t2.inv_amt end) as Vessel_amt 
from pbosinvoiceitem t1 
inner join pbosinvoice t2 ON t2.id = t1.master_id 
inner join pbosinvtype t4 ON t4.code = t2.inv_type 
group by t1.scn,t2.void_flg 

select文に基づいて

Select t1.scn,t1.vsl_name, t1.act_arr_dt_tm, t1.act_dept_dt_tm, t1.del_remarks 
from vesvoy t1 

私はレポートのような結果を得ることができます。私は一時テーブルを作成しようとしているが、私が得るデータはすべて重複している。

私は両方のクエリを組み合わせることが、結果は、重複結果

+0

レポート画面のキャプチャにデータが表示されません。 –

+0

サンプルデータと予想される結果を投稿した方が簡単です。 'group by 'と' distinct'を使う必要はありません。クエリを結合すると、どのデータが「複製」されますか?各フィールドが 'group by'節にあると仮定すると、その行の' distinct'データを再実行します。あなたはあなたの質問を定義するより良い仕事をする必要があります... – sgeddes

答えて

1

を示し、私はここで考えて座ってみてください:「?最初のクエリが第二としなければならないもの」どちらも同じテーブルにあります。vesvoyですが、何が問題なのでしょうか。 2番目は最初の行と同じ行を処理しています。

joinが行を失っている可能性があると思われます。だから、私は答えがinner joinではなく、left joinの使用であると思われます。途中で、select distinctを取り除く。これは一般的には悪い考えです。同じ非集約列のgroup byとの組み合わせでは、SQLの認識が不足しているだけです。

これはあなたの懸念事項に対処していますか?

SELECT t1.scn, 
     MAX(case when t3.inv_num like 'VI%' then t3.inv_num end) as Vessel, 
     MAX(case when t3.inv_num like 'VI%' then t3.inv_amt end) as Vessel_amt 
FROM vesvoy t1 LEFT JOIN 
    pbosinvoiceitem t2 
    ON t2.scn = t1.scn LEFT JOIN 
    pbosinvoice t3 
    ON t3.id = t2.master_id 
GROUP BY t1.scn; 

これは一致しない行に対してNULLを返します。

関連する問題