【问题标题】:Order by in stuff part of pivot query按数据透视查询的部分内容排序
【发布时间】:2014-11-10 07:19:41
【问题描述】:

我想使用数据透视查询的内容部分按升序对日期进行排序。

示例

DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT  distinct ',' + QUOTENAME(column_date)--(column_date)
              FROM #temp 
              order by column_date /* Error occured here*/
        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'')
PRINT(@cols)

在 order by 子句附近获取上述脚本的错误。

错误详情

Msg 145, Level 15, State 1, Line 4  
ORDER BY items must appear in the select list if SELECT DISTINCT is specified.

【问题讨论】:

    标签: sql-server sql-server-2008-r2 pivot


    【解决方案1】:

    试试这个:

    您可以使用 Group by column_date 它将返回不同的日期

    DECLARE @cols AS NVARCHAR(MAX),
            @query  AS NVARCHAR(MAX)
    
    select @cols = STUFF((SELECT    ',' + QUOTENAME(column_date)--(column_date)
                  FROM #temp 
                  GROUP BY column_date
                  order by column_date /* Error occured here*/
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')
    PRINT(@cols)
    

    【讨论】:

    • 没错!非常感谢。
    【解决方案2】:

    我不知道你为什么使用order by 而不使用Top clause。试试这个。。

    SELECT @cols = ',' + column_date
    FROM   (SELECT DISTINCT Quotename(column_date) column_date
            FROM   #temp) A
    ORDER  BY column_date
    
    SELECT @cols = RIGHT(@cols, Len(@cols) - 1) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-29
      • 2012-12-31
      • 2019-11-15
      • 2017-09-18
      • 2016-02-25
      • 2014-12-09
      • 2016-09-07
      相关资源
      最近更新 更多