How to show certain amounts of lines?

Asked

Viewed 70 times

1

I have a query that takes the highest sales values of a given product per year . The query follows this structure :

select ano , descricao, sum(valor) as valor from produtos 
group by descricao, ano
order by ano asc, sum(valor) desc

The output follows this style :

ano    descricao  valor
2017   produto x     999
2017   produto t     992
2017   produto c     912
2017   produto j     899
2017   produto w     799
....
2018   produto x     1999
2018   produto t     1992
2018   produto c     1912
2018   produto j     1899
2018   produto w     1799

However I only want the first 2 per year :

2017   produto x     999
2017   produto t     992
2018   produto x     1999
2018   produto t     1992

You can do this in an SQL query using SQL Server ?

  • My answer didn’t help you? Would you consider it accepted?

1 answer

1


You can use ROW_NUMBER() and partition based on the year and request the sum of value to get the result.

  select X.ano, X.descricao, X.valor from 
       (select ano, descricao, valor, 
               row_number() over (
                 partition by ano order by valor desc
               ) rank_of_count
         from (
           select ano, descricao, sum(valor) valor 
           from produtos group by ano, descricao
         ) p
       ) X
 where rank_of_count <= 2

http://www.sqlfiddle.com/#! 18/1c235/49

  • Excellent solution. It worked, thank you.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.