Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQL: Repeat a result row multiple times, and number the rows

I have a SQL query with a result like this:

value | count
------+------
foo   |     1
bar   |     3
baz   |     2

Now I want to expand this so that each row with a count larger than 1 occurs multiple times. I also need these rows to be numbered. So I would get:

value | count | index
------+-------+------
foo   |     1 |     1
bar   |     3 |     1
bar   |     3 |     2
bar   |     3 |     3
baz   |     2 |     1
baz   |     2 |     2

I have to make this work on all the major databases (Oracle, SQL Server, MySQL, PostgreSQL, and maybe more). So a solution that works across different databases would be ideal, but clever ways to make it work on any database are appreciated.

like image 601
cygri Avatar asked Sep 06 '25 12:09

cygri


1 Answers

You could use a numbers table

SELECT value, count, number
FROM table
    JOIN Numbers 
        ON table.count >= Numbers.number

Here is a SQLFiddle using MSSQL

like image 95
Justin Pihony Avatar answered Sep 08 '25 11:09

Justin Pihony