首先按字母顺序按多列排序,然后按数字排序

Order by multiple column first with alphabet then numbers

尝试将 DB2 查询 ORDER BY 条件转换为 SQL 服务器

DB2 查询

ORDER BY 
CASE WHEN LEN(RTRIM(LTRIM(CorpName))) > 1 THEN CorpVal Else '999' END,
CASE WHEN SUBSTRING(FName,1,1) != '*' THEN FName Else '999'  END

SQL查询

ORDER BY 
CASE WHEN CorpName like '[a-z]%' THEN 0 ELSE 1 END,
CASE WHEN FName like '[a-z]%' THEN 0 ELSE 1 END

我有这样的数据

美国广播公司, 24KS, 安倍, 阿杰克斯, -额外的, ABF, 1X1

我需要如下输出

美国广播公司, 安倍, ABF, 阿杰克斯, 24KS, 1X1, -额外

这对我不起作用,需要更多建议。

排序由 SQL Server and DB2 中的排序规则决定。您的 iSeries DB2 似乎配置了 EBCDIC 排序规则,因此您可以向 ORDER BY 表达式添加一个明确的 COLLATE 子句,以强制 SQL 服务器的 EBCDIC 排序规则,因为您的 SQL服务器排序规则明显不同。

下面是原始 DB2 查询的示例,其中为 SQL 服务器添加了子句:

ORDER BY 
CASE WHEN LEN(RTRIM(LTRIM(CorpName))) > 1 THEN CorpVal Else '999' END COLLATE SQL_EBCDIC037_CP1_CS_AS,
CASE WHEN SUBSTRING(FName,1,1) != '*' THEN FName Else '999'  END COLLATE SQL_EBCDIC037_CP1_CS_AS