2

我有一张这样结构的桌子

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

我想创建一个视图,使数据以下列格式可用

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

我对视图不够熟悉,所以我需要一些指导。

谢谢

4

2 回答 2

5

您可以使用递归 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;
于 2013-10-25T20:13:37.017 回答
1

我能弄清楚这一点的唯一方法是创建一个包含所有数字的单独表,然后加入原始表。我创建了一个名为“allnumbs”的表,它只有一个名称为“num”的列,以及 1 到 10 之间的每个数字的记录。然后加入它们。

select cola, colb, b.num from temp a
join allnumbs b on b.num >= a.lownum and b.num <= a.highnum

表临时是您显示的表。希望这可以帮助。

于 2013-10-25T20:08:32.507 回答