SQL Server数据透视表按子句的顺序排序

时间:2016-06-29 21:13:40

标签: sql-server stored-procedures pivot-table

我正在制作一个数据透视表,左侧是客户,日期是顶部,所以我可以看到每个客户每天花费多少。我是全新的,所以在互联网的帮助下,我收集了一些有用的代码并给了我一个数据透视表。

问题是日期是随机顺序。无论我在哪里按顺序排序,它都会给我一个错误,我必须在内联函数或视图中使用Top或Offset。

如何按顺序排列列?

在旁注中,我们非常感谢任何改进我的代码的反馈。我的DL_Daily表包含客户编号,该客户在该日期的日期和总销售额。

SELECT * INTO #DailyReport
FROM
(SELECT customer,salesdate [DATE], salesamt from DL_Daily where salesdate  
  between '2016/05/01' and '2016/05/31' )  TAB


SELECT * INTO #FileDates
FROM
(      
SELECT distinct salesdate [DATE] from DL_Daily where salesdate between 
    '2016/05/01' and '2016/05/31'  

)   TAB


DECLARE @cols NVARCHAR (MAX)


SELECT @cols = COALESCE (@cols + ',[' + CONVERT(NVARCHAR, [DATE], 106) + ']', 
           '[' + CONVERT(NVARCHAR, [DATE], 106) + ']')
           FROM    (SELECT DISTINCT [DATE] FROM #DailyReport ) PV  


PRINT @cols

--Now pivot it

DECLARE @query NVARCHAR(MAX)
SET @query = '           
          SELECT * FROM 
         (
             SELECT * FROM #DailyReport 
         ) x
         PIVOT 
         (
             SUM(salesamt)
             FOR [DATE] IN (' + @cols + ')
        ) p      

        '     
EXEC SP_EXECUTESQL @query

DL每日样本数据:

Customer   Date  Sales
1       5/1/2016   520.75
1       5/2/2016   501.75
2       5/1/2016   15.75
3       5/1/2016   150.75
3       5/2/2016   507.35
3       5/3/2016   530.75
1       5/3/2016   250.75

Results

Customer   5/1      5/3     5/2

1         520.75     250.75     501.75
2          15.25
3         150.75     530.75     507.35       

所需结果:按此顺序排列的列5/1 5/2 5/3

1 个答案:

答案 0 :(得分:1)

order by应该有效。另请尝试使用格式111代替106

SELECT @cols = COALESCE (@cols + 
                         ',[' + CONVERT(NVARCHAR, [DATE], 111) + ']', 
                         '[' + CONVERT(NVARCHAR, [DATE], 111) + ']')
FROM  (  SELECT DISTINCT [DATE] 
         FROM #DailyReport 
      ) PV  
ORDER BY [DATE]