繁体   English   中英

将Oracle查询转换为SQL Server 2008

[英]Convert Oracle query to SQL Server 2008

我面临将Oracle查询转换为SQL Server 2008版本的问题。 在此Oracle查询中,使用LISTAGGconnect 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM