在声明的变量的结果上设置排序顺序

时间:2018-08-20 04:11:31

标签: sql sql-server

我正在尝试为以下代码返回特定的订单。这用于动态检索列标题。但是我无法按照我想要的方式进行排序。感谢您的帮助

DECLARE @columns NVARCHAR(MAX)
SET @columns = N'';
SELECT @columns+=N''+ColumnX
FROM
     (  
       SELECT  
       ROW_NUMBER() over (ORDER BY FullName ASC) AS RowNum,
       N', p.'+QUOTENAME(ColumnX) as ColumnX
        FROM TableX
       GROUP BY ColumnX
  ) as x;

当我在()中运行select时,它会正确排序该数据,但是当我运行SELECT @Columns时,它不会以相同的顺序进行拉取。

例如:

select in () returns rows in correct order 
 ,p.[Amy Smith],
 ,p.[Bob Jones]
 ,p.[Steve Jobs] 
 ,p.[Vince Neel]

SELECT @ columns returns 

 ,p.[Vince Neel],p.[Bob Jones],p.[Steve Jobs],p.[Amy Smith],

我不知道它是如何挑选订单的。

1 个答案:

答案 0 :(得分:0)

添加一个ORDER BY子句。否则,该序列可能是“不确定的”

DECLARE @columns NVARCHAR(MAX)
SET @columns = N'';
SELECT @columns+=N''+ColumnX
FROM
     (  
       SELECT  
       ROW_NUMBER() over (ORDER BY FullName ASC) AS RowNum,
       N', p.'+QUOTENAME(ColumnX) as ColumnX
        FROM TableX
       GROUP BY ColumnX
  ) as x
ORDER BY RowNum;   -- Added this