首先按字母顺序按多列排序,然后按数字排序
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
尝试将 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