Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create a sql view based converting ranges into rows

I have a table structured like so

ColA|ColB|LowRange|HighRange
----------------------------
  1   A     1         5

I would like to create a view that will make the data available in the following format

ColA|ColB|RangeNumber
----------------------
  1   A       1
  1   A       2 
  1   A       3
  1   A       4
  1   A       5

I'm not familiar enough with views so I need some direction.

Thanks

like image 384
Tim Avatar asked Jul 14 '26 00:07

Tim


1 Answers

You can accomplish this using a recursive CTE

CREATE TABLE ranges (
    ColA int,
    ColB char,
    LowRange int,
    HighRange int,
);

INSERT INTO ranges
VALUES (1, 'A', 1, 5),
(2, 'B', 5, 10);
GO

CREATE VIEW range_view
AS
WITH each AS
(
    SELECT ColA, ColB, LowRange AS n, HighRange
      FROM ranges
    UNION ALL
    SELECT ColA, ColB, n + 1, HighRange
      FROM each
     WHERE n + 1 <= HighRange
)
SELECT ColA, ColB, n
FROM each
GO

SELECT * FROM range_view
DROP VIEW range_view
DROP TABLE ranges;
like image 68
axblount Avatar answered Jul 15 '26 14:07

axblount



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!