我想创建一个名为saledetailfortax的视图,它将包含13列。它们是saledetaildate,saledetailtime,shopid,productid,unitid,expdate,batchno,mrp,totalprice,qty,looseqty,priceperunit和taxid。
我的查询是:
CREATE OR REPLACE VIEW saledetailfortax2 AS
select sd.saledetaildate, sd.saledetailtime, sd.shopid, sd.productid,
sd.unitid, sd.expdate, sd.batchno, sd.mrp, sd.totalprice, sd.qty,
sd.looseqty, sd.unitprice as priceperunit, ord.taxid
from saledetail sd
left JOIN distinctPriceperunit ord
ON sd.productid = ord.productid
AND sd.expdate = ord.expdate
AND sd.batchno = ord.batchno
AND sd.mrp = ord.mrp
AND sd.unitprice = ord.priceperunit
where sd.saledetaildate >= '2016-04-01'
order by sd.saledetaildate , sd.saledetailtime
问题是当有两个出租车具有相同的产品,expdate,batchno, mrp和unitprice然后有两个记录同样的东西。
在saledetail表中假设一条记录包含相同的productid,expdate,batchno,mrp和unitprice,但是productid在distinctPriceperunit表中有两个taxid,那么当left join出现时它会出现两条记录。但只有一个记录显示两个出租车中的任何一个。
那么如何消除重复记录。
查看distinctpriceperunit(所有都是不同的值):
SELECT DISTINCT od.productid,od.unitid,od.priceperunit,od.expdate,od.mrp,od.batchno,od.taxid 来自orderreceivedetail od ORDER BY od.productid,od.unitid,od.priceperunit,od.expdate,od.mrp,od.batchno,od.taxid;
表saledetail ( saledetailid字符变化(20)NOT NULL, saledetaildate日期, 没有时区的saledetailtime时间戳, shopid整数, 产品整数, 数整数, 单位整数, unitprice数字, discperc数字, discamt数字, 到期日, mrp数字, mfdate日期, batchno字符各不相同(50), 总价数字, isreturned布尔值, userid整数, saleid字符各不相同(20), isloose布尔值, looseqty整数, CONSTRAINT saledetail_pkey PRIMARY KEY(saledetailid) )
答案 0 :(得分:1)
GROUP BY
解决方案:
CREATE OR REPLACE VIEW saledetailfortax2 AS
select sd.saledetaildate, sd.saledetailtime, sd.shopid, sd.productid,
sd.unitid, sd.expdate, sd.batchno, sd.mrp, sd.totalprice, sd.qty,
sd.looseqty, sd.unitprice as priceperunit, MAX(ord.taxid)
from saledetail sd
left JOIN distinctPriceperunit ord
ON sd.productid = ord.productid
AND sd.expdate = ord.expdate
AND sd.batchno = ord.batchno
AND sd.mrp = ord.mrp
AND sd.unitprice = ord.priceperunit
where sd.saledetaildate >= '2016-04-01'
group by sd.saledetaildate, sd.saledetailtime, sd.shopid, sd.productid,
sd.unitid, sd.expdate, sd.batchno, sd.mrp, sd.totalprice, sd.qty,
sd.looseqty, sd.unitprice
order by sd.saledetaildate, sd.saledetailtime
相关的子查询解决方案:
CREATE OR REPLACE VIEW saledetailfortax2 AS
select sd.saledetaildate, sd.saledetailtime, sd.shopid, sd.productid,
sd.unitid, sd.expdate, sd.batchno, sd.mrp, sd.totalprice, sd.qty,
sd.looseqty, sd.unitprice as priceperunit,
(select max(taxid) from distinctPriceperunit ord
WHERE sd.productid = ord.productid
AND sd.expdate = ord.expdate
AND sd.batchno = ord.batchno
AND sd.mrp = ord.mrp
AND sd.unitprice = ord.priceperunit)
from saledetail sd
where sd.saledetaildate >= '2016-04-01'
order by sd.saledetaildate, sd.saledetailtime
答案 1 :(得分:0)
您可以使用GROUP BY这些列productid,expdate,batchno,mrp和unitprice。
答案 2 :(得分:-1)
使用
MAX(unitprice)
这将删除您的重复。