Solved

# Exclude Duplicates based on column value

Posted on 2014-02-17
219 Views
I have a view SSG_CATALOG that exports data for our catalog with columns  ITEMNMBR, ITEMDESC, DEALERPRICE, PRCLEVEL my problem is that because we used different price levels foreach item it creates a row for each item. For example Item ACCP2015BR1 has a price level of A, AAA, and B but the DEALERPRICE is the same for all 3 levels so I just want to return only the A price level if the DEALERPRICE for AAA and B = A.

0
Question by:skull52
• 3
• 3
• 3

LVL 35

Expert Comment

ID: 39865936
Hi,

My thought is a group by with the min of prclevel

ie
select
c.itemnmbr
, c.itemdesc
, c.dealerprice
, min( c.prclevel ) as PRCLEVEL
from dbo.SSG_CATALOG c
where
somewhereclause
group by
c.itemnmbr
, c.itemdesc
, c.dealerprice
order by
c.itemnmbr
, c.itemdesc
, c.dealerprice
;

HTH
David
0

LVL 65

Expert Comment

ID: 39865938
One way would be to use RANK() to order the PRICELEVEL values, grouped by ITEMNBR and DEALERPRICE, alphabetically (Assuming A is better than AAA is better than B), then just grab all the rows that sort first.
``````SELECT a.ITEMNMBR, a.ITEMDESC, a.DEALERPRICE, a.PRICELEVEL
FROM (
SELECT ITEMNBR, ITEMDESC, DEALERPRICE, PRICELEVEL,
RANK() OVER (PARTITION BY ITEMNMBR, DEALERPRICE ORDER BY PRICELEVEL) as rank_order) a
WHERE a.rank_order = 1
``````
0

LVL 35

Expert Comment

ID: 39865951
Hi,

I'd be interested in the execution plan costs - if there are major differences between these two approaches.

Regards
David
0

Author Comment

ID: 39866014
Thanks for the responses

David,
I get the following error from your suggestion
Msg 4145, Level 15, State 1, Line 9
An expression of non-boolean type specified in a context where a condition is expected, near 'group'.

Jim,
I cant even get yours to run I think the reference to the  SSG_CATALOG is missing
0

LVL 65

Accepted Solution

Jim Horn earned 500 total points
ID: 39866032
<correction to my above code.  You may have to check the column names, as the image was hard to read>
``````SELECT a.ITEMNMBR, a.ITEMDESC, a.DEALERPRICE, a.PRICELEVEL
FROM (
SELECT ITEMNBR, ITEMDESC, DEALERPRICE, PRICELEVEL,
RANK() OVER (PARTITION BY ITEMNMBR, DEALERPRICE ORDER BY PRICELEVEL) as rank_order
FROM SSG_CATALOG) a
WHERE a.rank_order = 1
``````
0

LVL 35

Expert Comment

ID: 39866036
Hi,

Did you just cut and paste my answer, or did you read it? You'll need to edit the where clause (or delete it!)

Regards
David
0

Author Comment

ID: 39867902
David, My bad I did miss the WHERE clause.

Jim, thanks for fixing that, I knew the Reference to the table was missing so I added it

OK, so with using Jim's solution I get 25071 rows With David's I get 24974 a difference of 97 rows
0

LVL 65

Expert Comment

ID: 39867942
>OK, so with using Jim's solution I get 25071 rows With David's I get 24974 a difference of 97 rows
Since we don't have access to your data set, you will have to identify the 97 row difference and troubleshoot.   Perhaps there are duplicate rows being returned, in which case you can replace SELECT with SELECT DISTINCT.
0

Author Comment

ID: 39874557
Jim,
I used DISTINCT but it only returned 1 row less, and I examined the results and they look good so I am going with your solution. Thanks to David for his solution also.
0

## Featured Post

### Suggested Solutions

If you have heard of RFC822 date formats, they can be quite a challenge in SQL Server. RFC822 is an Internet standard format for email message headers, including all dates within those headers. The RFC822 protocols are available in detail at:   ht…
In this article we will get to know that how can we recover deleted data if it happens accidently. We really can recover deleted rows if we know the time when data is deleted by using the transaction log.
This video discusses moving either the default database or any database to a new volume.
Illustrator's Shape Builder tool will let you combine shapes visually and interactively. This video shows the Mac version, but the tool works the same way in Windows. To follow along with this video, you can draw your own shapes or download the file…