2016-11-25 9 views
1

Azure DWはFOR XMLSELECT変数割り当てをサポートしていないため、CURSOR以外の複数の行を1行に変換する方法はありますか?Azureデータウェアハウスの複数行から単一行へ

+0

Azure SQL DWはカーソルもサポートしていません。しかし、ループをサポートします。この[最近の回答](http://stackoverflow.com/questions/40255719/parent-child-hierarchy-path-without-using-cte)を見てください。私は文字列の連結とループを使用してDWのためにしました。いくつかのサンプルデータと期待される結果を投稿していただけますか?SQL DW固有のソリューションを見ていきます。 – wBob

+0

ありがとうございました。私は私のためにうまくいっている以下のクエリを掲載しました。あなたがこれを達成するための他の方法があれば教えてください。 – Suresh

答えて

3

私は以下のコードが私のために働いていますが、直接的な方法は見つかりませんでした。

DECLARE @intColumnCount INT, 
     @intProcessCount INT, 
     @varColList  VARCHAR(max) 

SET @varColList = '' 

IF Object_id('tempdb.dbo.#tempColumnNames') IS NOT NULL 
    BEGIN 
     DROP TABLE #tempcolumnnames; 
    END 

CREATE TABLE #tempcolumnnames 
    ( 
    intid   INT, 
    varcolumnnames VARCHAR(256) 
) 

INSERT INTO #tempcolumnnames 
SELECT Row_number() 
     OVER ( 
      ORDER BY NAME), 
     NAME 
FROM sys.tables 

SET @intProcessCount = 1 
SET @intColumnCount = (SELECT Count(*) 
         FROM #tempcolumnnames) 

WHILE (@intProcessCount <= @intColumnCount) 
    BEGIN 
     SET @varColList = @varColList + ', ' 
         + (SELECT varcolumnnames 
          FROM #tempcolumnnames 
          WHERE intid = @intProcessCount) 
     SET @intProcessCount +=1 
    END 

SELECT Stuff(@varColList, 1, 2, '') 

これは誰かを助けることを望みます。

+0

私はループの安全性の中で構築します:) – wBob

+2

正直なところ、ちょっと混乱します。テーブルは 'tempcolumnnames'と呼ばれますが、テーブル名を追加します。このコードは、非常に高価な60ノードのMPPサーバーでどのような目的に使用できますか? – wBob

関連する問題