[英]Convert Oracle query to SQL Server 2008
我面临将Oracle查询转换为SQL Server 2008版本的问题。 在此Oracle查询中,使用LISTAGG
和connect by prior
。 我研究了网络,发现WITH AS ()
connect by prior
SQL Server 2008中的connect by prior
等效connect by prior
。
同样对于SQL Server 2008中的LISTAGG
替代,我们可以使用STUFF()
。 但是我在将这两种逻辑整合为一个方面面临困难。 请帮我。 我尝试的解决方案似乎是错误的。
这是Oracle查询:
SELECT
(LISTAGG(T1.c2, '/') WITHIN GROUP (ORDER BY T1.c1))
FROM
Table1 T1
START WITH T1.c1 = T2.c3
CONNECT BY PRIOR T1.c3 = T1.c1
这是我尝试的解决方案:
with n(col1, col2) as
(
select T1.c1, '/' + T1.c2
from table1 T1,
where T1.c1 = T2.c3
union ALL
select T3.c1, '/' + T3.c2
from table1 as T4,T3
where T4.c3 = T3.c1
)
select col2 from n;
在这两个查询中, T2
是在外部查询中使用的Table2
的引用。
例如:
Select
.....,
.....,
.
.
(
select (LISTAGG(T1.c2, '/') WITHIN GROUP (ORDER BY T1.c1))
FROM Table1 T1
start with T1.c1 = T2.c3
connect by prior T1.c3 = T1.c1
) as ABC,
'
'
'
From
Table A,
Table B,
.
.
Table T2
我提到的链接::
LISTAGG
您可以在这里找到 。
With
您可以在SQL中执行以下操作:
select * into #n from
(
select T1.c1 col1, '/' + T1.c2 col2
from table1 T1,
where T1.c1 = T2.c3
union ALL
select T3.c1, '/' + T3.c2
from table1 as T4,T3
where T4.c3 = T3.c1
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.