2016-11-25 49 views
1

由于Azure DW不支持FOR XMLSELECT变量赋值,除了使用CURSOR之外,还有其他方法可以将多行转换为单行吗?在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