SQL Server 相当于 Oracle CONNECT BY 和 LEVEL 伪列

标签 sql sql-server oracle

请帮助将 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 一样。例如:表中只有一个开始日期 - 4/22/2013。但是使用 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

提前非常感谢大家。

最佳答案

我过去做过的一种方法是像这样查询 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

SQL Fiddle Demo

关于SQL Server 相当于 Oracle CONNECT BY 和 LEVEL 伪列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15031897/

相关文章:

sql - “Relation” 与 RDBMS/SQL 中的 “relationship”?

sql - 试图在两行和两列中查找重复值 - SQL Server

sql - 如果子集组合返回空结果,查询获取超集?

oracle - 浏览多个字段的值并将它们插入到同一列中

python - 语法错误 : Non-ASCII character '\xd1'

javascript - 关于node.js中的MySQL模块以及与mySQL数据库的并发连接

c# - 用c#检查一个表是否存在于oracle sql数据库中

Java - 当我尝试关闭数据库资源时无法访问语句

c# - "Error: Cannot Initialize OLE"当我尝试运行 SPA 时?

sql - 在 Oracle SQL 中删除所有以 "EXT_"开头的表