【发布时间】:2017-10-27 06:57:57
【问题描述】:
我无法根据大量数据对数据进行排序。我看过很多例子,但似乎没有一个能解决音量问题——或者我可能只是遗漏了一些东西。我在这里进行了很好的查看:Sort Columns For Dynamic Pivot 和 PIVOT in sql 2005 并找到了很多好的建议,但我仍然找不到对我的枢轴进行排序的正确方法。
我正在使用以下 sql。它旋转列,但需要对结果进行排序以提高可读性:
SELECT a.* INTO #tempA
FROM (SELECT top (5000) id, email, CONVERT(varchar,ROW_NUMBER() OVER
(PARTITION BY email ORDER BY id)) AS PIVOT_CODE FROM Email) a
order by PIVOT_CODE
DECLARE @cols AS NVARCHAR(MAX),
@sql AS NVARCHAR(MAX)
SELECT @cols =STUFF((SELECT DISTINCT ', ' + QUOTENAME(col)
FROM #tempA WITH (NOLOCK)
cross apply
(
SELECT 'id_' + PIVOT_CODE, id
) c (col, so)
group by col, so
--order by col
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @sql = 'SELECT email, '
+@cols+
'INTO ##AnotherPivotTest FROM
(
SELECT email,
col,
value
FROM #tempA WITH (NOLOCK)
cross apply
(
values
(''id_'' + PIVOT_CODE, id)
) c (col, value)
) d
pivot
(
max(value)
for col in ('
+ @cols+
')
) piv'
EXEC (@sql)
SELECT * FROM ##AnotherPivotTest
结果看起来很混乱:
==============================================================================================
| email | id_19 | id_24 | id_2 | id_16 | id_5 | id_9 | id_23 | .... | id_1 | .... | id_10 |
==============================================================================================
| xx@yy.dk | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 1234 | NULL | NULL |
==============================================================================================
我非常希望对 ID 进行排序 - 从 id_1 开始。
如您所见,我试图在“cols”的选择中放置“order by”,但这给了我错误:“如果指定了 SELECT DISTINCT,则 ORDER BY 项目必须出现在选择列表中。”如果没有 DISTINCT,我会收到另一个错误:“选择列表中的元素数量超过了 4096 个元素的最大允许数量。”
我被困住了,所以任何帮助都将不胜感激!
【问题讨论】:
标签: sql sql-server sql-server-2008 sorting pivot