我正在制作一个数据透视表,左侧是客户,日期是顶部,所以我可以看到每个客户每天花费多少。我是全新的,所以在互联网的帮助下,我收集了一些有用的代码并给了我一个数据透视表。
问题是日期是随机顺序。无论我在哪里按顺序排序,它都会给我一个错误,我必须在内联函数或视图中使用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
答案 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]