请帮助将Oracle查询转换为等效的SQL Server:
SELECT (LEVEL+1-1) AS lvl
FROM dual
CONNECT BY LEVEL <= 10
/
输出为1到10之间的数字:
LVL
----
1
2
3
...
10
我知道SQL Server中存在层次结构方法,而GetLevel
等内置函数则更多。这可以用来获得相同的结果吗?
如果需要(不确定)创建双表 - 从这里复制:http://blog.sqlauthority.com/2010/07/20/sql-server-select-from-dual-dual-equivalent/
CREATE TABLE DUAL
(
DUMMY VARCHAR(1)
)
GO
INSERT INTO DUAL (DUMMY)
VALUES ('X')
GO
专门寻找可以使用smth的例子。像查询中的LEVEL一样。例如:表格中只有一个开始日期 - 2013年4月22日。但是对于LEVEL,我可以按如下方式增加它:
SELECT start_date, start_date+LEVEL-1 AS start_date_btwn
FROM my_tab
WHERE id = 1
CONNECT BY LEVEL<=10
/
START_DATE START_DATE_BTWN
------------------------------
4/22/2013 4/22/2013
4/22/2013 4/23/2013
4/22/2013 4/24/2013
4/22/2013 4/25/2013
......
4/22/2013 4/30/2013
非常感谢所有人。
答案 0 :(得分:11)
我过去做过的一种方法是像这样查询spt_values
:
SELECT number
FROM master..spt_values
WHERE
type = 'P'
AND number <= 255
但是,它没有完整的数字列表。另一种选择是创建一个像这样的递归CTE:
WITH CTE AS (
SELECT 1 as Number
UNION ALL
SELECT Number+1
FROM CTE
WHERE Number < 100
)
SELECT * FROM CTE