2017-11-19 15 views
2

OracleクエリをSQL Server 2008バージョンに変換する際に問題が発生しました。このOracleクエリーでは、LISTAGGconnect by priorが使用されます。私はWITH AS()たちはSTUFF()を使用することができますSQL Server 2008のLISTAGG代替のための2008年OracleクエリをSQL Server 2008に変換

また、SQL Serverのconnect by prior同等であることを見つけるためにウェブを研究しました。しかし、私はこれらの2つのロジックを1つに統合するのが困難に直面しています。私を助けてください。私が試した解決策は間違っているようです。クエリT2の両方でここ

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; 

に使用されているTable2の基準とされています

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 

これは私が試した解決策は次のとおりです。

ここ

は、Oracleのクエリです外部クエリ。

例:私は呼ば

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 

リンク::

答えて

0

LISTAGGすることができますSE 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 
) 
関連する問題