假设我有这张表:
|Fld | Number|
1 5
2 2
我想创建一个选择,检索与Fld
字段一样多的Number
:
|Fld |
1
1
1
1
1
2
2
我怎样才能做到这一点?我正在考虑根据Number
创建一个临时表和instert数据,但我想知道是否可以使用一个Select语句来完成。
PS:我是SQL的新手
答案 0 :(得分:3)
您可以加入数字表:
SELECT Fld
FROM yourtable
JOIN Numbers
ON yourtable.Number <= Numbers.Number
数字表只是一个包含数字列表的表:
Number
1
2
3
etc...
答案 1 :(得分:2)
我不知道您的RDBMS版本是否支持它(虽然我更怀疑它确实如此),但这是一个递归版本:
WITH remaining (fld, times) as (SELECT fld, 1
FROM <table>
UNION ALL
SELECT a.fld, a.times + 1
FROM remaining as a
JOIN <table> as b
ON b.fld = a.fld
AND b.number > a.times)
SELECT fld
FROM remaining
ORDER BY fld
根据您的源数据表,它输出(包括用于验证的计数):
fld times
=============
1 1
1 2
1 3
1 4
1 5
2 1
2 2
答案 2 :(得分:2)
不是一个很好的解决方案(因为你仍然会查询你的表两次,但也许你可以使用它)
SELECT t1.fld, t1.number
FROM table t1, (
SELECT ROWNUM number FROM dual
CONNECT BY LEVEL <= (SELECT MAX(number) FROM t1)) t2
WHERE t2.number<=t1.number
它会生成所需的最大行数,然后按行对其进行过滤。