我有一个像这样结构的表
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
我对观点不够熟悉所以我需要一些方向。
由于
答案 0 :(得分: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;
答案 1 :(得分: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
表格temp是您显示的表格。希望这会有所帮助。