G Nell
G Nell

Reputation: 85

Duplicate Rows where DISTINCT is not working

I have tried several different ways to eliminate duplicates. I have submitted what my query results are and also showed what the end results should look like.

WITH CTE AS (
SELECT DISTINCT
    a.SiteID
    ,a.SiteDescription
    ,iv.VendorNumber
    ,iv.VendorName
    ,mrh.DateReceived
    ,mrh.DocumentNumber
    ,mrh.InvoiceDate
    ,mrh.InvoiceNumber
    ,i.StockNumber
    ,i.StockDescription
    ,ia.UnitsPerPack
    ,mrh.ReceivingComment
    ,ia.BrokenQuantityAdjustment
    ,ia.BasePackCost
    ,mri.BrokenQuantityAdjusted
    ,ia.fee
FROM AdmSites a, InvVendors iv, InvItems i, InvManualReceivingHeader mrh, InvAdjustments ia, InvManualReceivingItems mri, InvManualReceivingItemsAdjustments ria
WHERE a.AdmSiteID = mrh.AdmSiteId
AND a.AdmSiteID = ia.AdmSiteID
AND i.InvItemID = ia.InvItemID
AND iv.InvVendorID = ia.InvVendorID
AND mrh.DateReceived = ia.AdjustmentDate
AND ria.DateReceived = mrh.DateReceived
AND ia.InvoiceNumber = mrh.InvoiceNumber
AND mrh.InvoiceNumber = 'deleted'
AND ia.InvoiceDate BETWEEN '2017-05-01' AND '2018-08-22'
AND (ia.InvoiceNumber LIKE '%' + ia.InvoiceNumber + '%' OR ia.InvoiceNumber IS NULL)
)
SELECT  t1.*, t2.PackQty, t1.BasePackCost * t2.PackQty as TotalCost, t1.BasePackCost * t2.PackQty as TotalValue
FROM CTE t1 INNER JOIN
(SELECT  SUM(BrokenQuantityAdjustment)PackQty, BasePackCost
FROM CTE
GROUP BY BasePackCost
) t2 on t1.BasePackCost = t2.BasePackCost
ORDER BY  StockNumber, BasePackCost

My Results from the query list above:

  SiteID   SiteDescription   VendorNumber   VendorName   DateReceived   DocumentNumber   InvoiceDate   InvoiceNumber   StockNumber   StockDescription            UnitsPerPack   ReceivingComment   BrokenQuantityAdjustment   BasePackCost   BrokenQuantityAdjusted   fee   PackQty   TotalCost   TotalValue  
 -------- ----------------- -------------- ------------ -------------- ---------------- ------------- --------------- ------------- --------------------------- -------------- ------------------ -------------------------- -------------- ------------------------ ----- --------- ----------- ------------ 
  69       Madison High      4              DAIRY        05/03/18       939              06/04/18      deleted         1451          MILK WHITE 1%               1                                 -161                       0.1615         0                        0     89        14.3735     14.3735     
  69       Madison High      4              DAIRY        05/03/18       939              06/04/18      deleted         1451          MILK WHITE 1%               1                                 250                        0.1615         0                        0     89        14.3735     14.3735     
  69       Madison High      4              DAIRY        05/03/18       939              06/04/18      deleted         1451          MILK WHITE 1%               1                                 -89                        0.1617         0                        0     -89       -14.3913    -14.3913    
  69       Madison High      4              DAIRY        05/03/18       939              06/04/18      deleted         1580          MILK LACTAID FREE SKIM PF   1                                 -20                        0.6185         0                        0     0         0           0           
  69       Madison High      4              DAIRY        05/03/18       939              06/04/18      deleted         1580          MILK LACTAID FREE SKIM PF   1                                 20                         0.6185         0                        0     0         0           0   

Expected Results if I can get this query to work:

 SiteID   SiteDescription   VendorNumber   VendorName   DateReceived   DocumentNumber   InvoiceDate   InvoiceNumber   StockNumber   StockDescription            UnitsPerPack   ReceivingComment   BrokenQuantityAdjustment   BasePackCost   BrokenQuantityAdjusted   fee   PackQty   TotalCost   TotalValue  
 -------- ---------------- -------------- ------------ -------------- ---------------- ------------- --------------- ------------- --------------------------- -------------- ------------------ -------------------------- -------------- ------------------------ ----- --------- ----------- ------------ 
  69       Madison High      4              DAIRY        05/03/18       939              06/04/18      deleted         1451          MILK WHITE 1%               1                                 -161                       0.1615         0                        0     89        14.3735     14.3735     
  69       Madison High      4              DAIRY        05/03/18       939              06/04/18      deleted         1451          MILK WHITE 1%               1                                 -89                        0.1617         0                        0     -89       -14.3913    -14.3913    
  69       Madison High      4              DAIRY        05/03/18       939              06/04/18      deleted         1580          MILK LACTAID FREE SKIM PF   1                                 -20                        0.6185         0                        0     0         0           0      

Here is code to create table and insert data if this will help.

CREATE TABLE mytable(
   SiteID                   INTEGER  NOT NULL PRIMARY KEY 
  ,SiteDescription          VARCHAR(12) NOT NULL
  ,VendorNumber             INTEGER  NOT NULL
  ,VendorName               VARCHAR(5) NOT NULL
  ,DateReceived             DATE  NOT NULL
  ,DocumentNumber           INTEGER  NOT NULL
  ,InvoiceDate              DATE  NOT NULL
  ,InvoiceNumber            VARCHAR(50) NOT NULL
  ,StockNumber              INTEGER  NOT NULL
  ,StockDescription         VARCHAR(25) NOT NULL
  ,UnitsPerPack             BIT  NOT NULL
  ,ReceivingComment         VARCHAR(30)
  ,BrokenQuantityAdjustment INTEGER  NOT NULL
  ,BasePackCost             NUMERIC(6,4) NOT NULL
  ,BrokenQuantityAdjusted   BIT  NOT NULL
  ,fee                      BIT  NOT NULL
  ,PackQty                  INTEGER  NOT NULL
  ,TotalCost                NUMERIC(8,4) NOT NULL
  ,TotalValue               NUMERIC(8,4) NOT NULL
);
INSERT INTO mytable(SiteID,SiteDescription,VendorNumber,VendorName,DateReceived,DocumentNumber,InvoiceDate,InvoiceNumber,StockNumber,StockDescription,UnitsPerPack,ReceivingComment,BrokenQuantityAdjustment,BasePackCost,BrokenQuantityAdjusted,fee,PackQty,TotalCost,TotalValue) VALUES (69,'Madison High',4,'DAIRY','5/3/2018',939,'6/4/2018','deleted',1451,'MILK WHITE 1%',1,NULL,-161,0.1615,0,0,89,14.3735,14.3735);
INSERT INTO mytable(SiteID,SiteDescription,VendorNumber,VendorName,DateReceived,DocumentNumber,InvoiceDate,InvoiceNumber,StockNumber,StockDescription,UnitsPerPack,ReceivingComment,BrokenQuantityAdjustment,BasePackCost,BrokenQuantityAdjusted,fee,PackQty,TotalCost,TotalValue) VALUES (69,'Madison High',4,'DAIRY','5/3/2018',939,'6/4/2018','deleted',1451,'MILK WHITE 1%',1,NULL,250,0.1615,0,0,89,14.3735,14.3735);
INSERT INTO mytable(SiteID,SiteDescription,VendorNumber,VendorName,DateReceived,DocumentNumber,InvoiceDate,InvoiceNumber,StockNumber,StockDescription,UnitsPerPack,ReceivingComment,BrokenQuantityAdjustment,BasePackCost,BrokenQuantityAdjusted,fee,PackQty,TotalCost,TotalValue) VALUES (69,'Madison High',4,'DAIRY','5/3/2018',939,'6/4/2018','deleted',1451,'MILK WHITE 1%',1,NULL,-89,0.1617,0,0,-89,-14.3913,-14.3913);
INSERT INTO mytable(SiteID,SiteDescription,VendorNumber,VendorName,DateReceived,DocumentNumber,InvoiceDate,InvoiceNumber,StockNumber,StockDescription,UnitsPerPack,ReceivingComment,BrokenQuantityAdjustment,BasePackCost,BrokenQuantityAdjusted,fee,PackQty,TotalCost,TotalValue) VALUES (69,'Madison High',4,'DAIRY','5/3/2018',939,'6/4/2018','deleted',1580,'MILK LACTAID FREE SKIM PF',1,NULL,-20,0.6185,0,0,0,0,0);
INSERT INTO mytable(SiteID,SiteDescription,VendorNumber,VendorName,DateReceived,DocumentNumber,InvoiceDate,InvoiceNumber,StockNumber,StockDescription,UnitsPerPack,ReceivingComment,BrokenQuantityAdjustment,BasePackCost,BrokenQuantityAdjusted,fee,PackQty,TotalCost,TotalValue) VALUES (69,'Madison High',4,'DAIRY','5/3/2018',939,'6/4/2018','deleted',1580,'MILK LACTAID FREE SKIM PF',1,NULL,20,0.6185,0,0,0,0,0);

Upvotes: 2

Views: 118

Answers (2)

Error_2646
Error_2646

Reputation: 3849

I'm not writing it all out for your query, but this is how you approach excluding any record with a duplicate on "Field3"

SELECT TMP.* 
  FROM (SELECT Field1,
               Field2,
               Field3,
               COUNT(1) OVER
                 ( PARTITION BY Field3
                 ) AS cntOfField3
         FROM Some_Table
       ) AS TMP
 WHERE cntOfField3 = 1;

It looks like you actually want records with duplicates on this field, you just want one of them.

SELECT TMP.* 
  FROM (SELECT Field1,
               Field2,
               Field3,
               ROW_NUMBER() OVER
                 ( PARTITION BY Field3
                       ORDER BY 1 -- How do you want to select it?
                 ) AS cntOfField3
         FROM Some_Table
       ) AS TMP
 WHERE cntOfField3 = 1

Upvotes: 1

user1443098
user1443098

Reputation: 7675

You're getting duplicates since you are joining your CTE with another table:

SELECT  t1.*, t2.PackQty, t1.BasePackCost * t2.PackQty as TotalCost, t1.BasePackCost * t2.PackQty as TotalValue
FROM CTE t1 INNER JOIN
(SELECT  SUM(BrokenQuantityAdjustment)PackQty, BasePackCost
FROM CTE
GROUP BY BasePackCost
) t2 on t1.BasePackCost = t2.BasePackCost
ORDER BY  StockNumber, BasePackCost

Although the rows in the CTE are distinct, unless you can guarantee a 1x1 mapping to the inner join subquery, you'll get duplicates.

Upvotes: 0

Related Questions