SQL Server相当于Oracle按级别和伪列连接
请帮助将Oracle查询转换为SQL Server等效查询:SQL Server相当于Oracle按级别和伪列连接,sql,sql-server,oracle,Sql,Sql Server,Oracle,请帮助将Oracle查询转换为SQL Server等效查询: SELECT (LEVEL+1-1) AS lvl FROM dual CONNECT BY LEVEL <= 10 / 我知道SQL Server中有层次结构方法和内置方法,如GetLevel等。这可以用来得到同样的结果吗 如果需要(不确定)创建双表-从此处复制: 特别是寻找可以使用smth的示例。类似于查询中的级别。例如:表中只有一个开始日期-2013年4月22日。但对于级别,我可以按如下方式增加它: SELECT
SELECT (LEVEL+1-1) AS lvl
FROM dual
CONNECT BY LEVEL <= 10
/
我知道SQL Server中有层次结构方法和内置方法,如GetLevel
等。这可以用来得到同样的结果吗
如果需要(不确定)创建双表-从此处复制:
特别是寻找可以使用smth的示例。类似于查询中的级别。例如:表中只有一个开始日期-2013年4月22日。但对于级别,我可以按如下方式增加它:
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
选择开始日期,开始日期+级别1作为开始日期
从我的账单上
其中id=1
按级别连接我过去使用的一种方法是查询spt\u值
如下:
SELECT number
FROM master..spt_values
WHERE
type = 'P'
AND number <= 255
选择数字
从主..spt_值
哪里
类型='P'
你需要的最大数字是多少?@sgeddes-不,在Oracle中可以是任意数字,而不是我的示例中的10。为了简单起见,我将示例限制为10。谢谢你。@Martin-谢谢你。这很有帮助。由于没有oracle实例,我不得不阅读一些文档。我认为递归CTE与您在T-SQL中所能得到的最接近。@sgedes-谢谢。仍在寻找与LEVEL伪列相同的值。我也希望有层次结构方法的例子。@Art-我们没有看到与level列等效的例子(尽管SQL Server在内部跟踪它以查看是否达到了最大递归限制),但是像@Martin中那样自己添加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
SELECT number
FROM master..spt_values
WHERE
type = 'P'
AND number <= 255
WITH CTE AS (
SELECT 1 as Number
UNION ALL
SELECT Number+1
FROM CTE
WHERE Number < 100
)
SELECT * FROM CTE