将Oracle查询转换为SQL Server 2008

时间:2017-11-19 18:09:02

标签: sql sql-server oracle sql-server-2008

我将Oracle查询转换为SQL Server 2008版本时遇到问题。在此Oracle查询中使用了LISTAGGconnect by prior。我研究了网络,发现SQL Server 2008中WITH AS ()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

我引用的链接::

1 个答案:

答案 0 :(得分:0)

LISTAGG您可以here

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  
)