2016-04-05 4 views
0

私のクエリは次のとおりです。去ったとき、正確な行を取得し、別のテーブルに参加

CREATE OR REPLACE VIEW saledetailfortax AS 
    SELECT 
     sd.saledetaildate, sd.saledetailtime, sd.shopid, sd.productid, 
     sd.unitid, sd.expdate, sd.batchno, sd.mrp, sd.totalprice, sd.qty, 
     sd.looseqty, ord.priceperunit as priceperunit, ord.taxid 
    FROM 
     saledetail sd LEFT JOIN orvrcvdetailfortax ord 
           ON sd.productid = ord.productid 
            AND sd.expdate = ord.expdate 
            AND sd.batchno = ord.batchno 
            AND sd.mrp = ord.mrp 
    WHERE sd.saledetaildate <= '2016-03-31' 
    ORDER BY sd.saledetaildate , sd.saledetailtime; 

ここでそれを実行したとき、それはこのクエリを実行するよりも多くの行を返します。

SELECT 
    sd.saledetaildate, sd.saledetailtime, sd.shopid, 
    sd.productid,sd.unitid, sd.expdate, sd.batchno, 
    sd.mrp, sd.totalprice, sd.qty, sd.looseqty 
FROM saledetail sd 
WHERE sd.saledetaildate <= '2016-03-31' 
ORDER BY sd.saledetaildate, sd.saledetailtime; 

私の目的から行を取得することですsaledetailテーブルとそれに対応するのを見つける priceperunit, taxid where productid, expdate, batchno, mrpが一致します。

問題は同じ(productid, expdate, batchno, mrp)異なっていますtaxid終了するようにレコードが欲しい以上になります。それを減らす方法。あなたは

上記のようにした後にのみ1 2条件を記述する必要が

+0

私に両方のテーブルのデータを送信します1-1マッチどのような一致する行が正しいかを判断するのに役立つ質問の情報を提供していないため、これらは完全には不明です。 –

+0

質問があいまいなので、 "GROUP BY"を使用して繰り返し行を削除してみてください。 –

+0

なぜあなたは重複した行を持っているのか理解していないのに 'GROUP BY'(または' DISTINCT')を使わないでください。 –

答えて

0
CREATE OR REPLACE VIEW saledetailfortax AS 
    SELECT 
     sd.saledetaildate, sd.saledetailtime, sd.shopid, sd.productid, 
     sd.unitid, sd.expdate, sd.batchno, sd.mrp, sd.totalprice, 
     sd.qty, sd.looseqty, ord.priceperunit as priceperunit, ord.taxid 
    FROM saledetail sd LEFT JOIN orvrcvdetailfortax ord 
          ON sd.productid = ord.productid 
    WHERE sd.saledetaildate <= '2016-03-31' 
    ORDER BY sd.saledetaildate , sd.saledetailtime; 

明白な答えは、あなたが持っているように、正しい `join`条件を用いることであろう

関連する問題