Sql server 如何在SQL Server中按分组集对分组下的varchar类型的数字进行排序?

Sql server 如何在SQL Server中按分组集对分组下的varchar类型的数字进行排序?,sql-server,Sql Server,我有一个名为UPC(varchar类型)的列,它只包含数字。 我在UPC上还有一个分组集 目前,它被排序为varchar,这导致数字没有从最小到最大排序 GROUP BY GROUPING SETS(([UPC]),()) 如果我使用convert将UPC从varchar转换为bigint,数字将按字母顺序排序,但从分组集生成的最后一行将从最后一行移到第一行 GROUP BY GROUPING SETS(([UPC]),()) ORDER BY convert(bigint

我有一个名为UPC(varchar类型)的列,它只包含数字。 我在UPC上还有一个分组集

目前,它被排序为varchar,这导致数字没有从最小到最大排序

GROUP BY 
GROUPING SETS(([UPC]),())

如果我使用convert将UPC从varchar转换为bigint,数字将按字母顺序排序,但从分组集生成的最后一行将从最后一行移到第一行

GROUP BY 
GROUPING SETS(([UPC]),())       
ORDER BY convert(bigint, UPC)

有没有办法让我的“总计”移到最后一行,并且仍然按字母顺序排列我的数字?
我猜我可能需要使用分组ID?

您可以自定义order by子句,如下例所示:

Order by case when isnumeric(UPC) = 1 then convert(bigint, UPC) else 9999999999 end

数字9999999999表示您可能拥有的最大数字

使用分组id是否会加快SQL Server的运行速度?我还得到了一个类似这样的建议:当分组_ID((UPC))=1,然后2 ELSE 1 END,convert(bigint,UPC)时按大小写顺序,您走错了路。您需要帮助服务器,不要强迫它。如果你有ETL软件包,你将有这个巫毒的解决方案