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



我正在尝试为下面的代码返回特定的顺序。 这用于动态检索列标题。 但我无法让它按照我想要的方式排序。 任何帮助不胜感激

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],

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

添加一个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

最新更新