Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQl Server:先对字母数字排序,然后对数字排序_Sql_Sorting_Alphanumeric - Fatal编程技术网

SQl Server:先对字母数字排序,然后对数字排序

SQl Server:先对字母数字排序,然后对数字排序,sql,sorting,alphanumeric,Sql,Sorting,Alphanumeric,我可以先按数字排序,然后按字母数字排序。我需要反向排序,首先按字母数字排序,然后按数字排序 例如: 一,, 3. 13036, 101-2011-009X2, 20-100281-01, ELO-001, ELO001B, ELO002B您可以通过使用子查询来实现这一点。子查询将数值和非数值分开,并为它们提供计算字段,以便可以按主查询的顺序使用它们 SELECT dbo.base_project.id as ID, dbo.base_project.name as Name,

我可以先按数字排序,然后按字母数字排序。我需要反向排序,首先按字母数字排序,然后按数字排序

例如:

一,, 3. 13036, 101-2011-009X2, 20-100281-01, ELO-001, ELO001B,
ELO002B

您可以通过使用子查询来实现这一点。子查询将数值和非数值分开,并为它们提供计算字段,以便可以按主查询的顺序使用它们

SELECT  dbo.base_project.id as ID, 
        dbo.base_project.name as Name,
        dbo.base_project.status
FROM         dbo.base_project
ORDER BY   
Case When IsNumeric(dbo.base_project.name) = 1 
     then Right(Replicate('0',21) + dbo.base_project.name, 20)
     When IsNumeric(dbo.base_project.name) = 0 
     then Left(dbo.base_project.name + Replicate('',21), 20)
     Else dbo.base_project.name End

你是说在同一个领域?示例数据是否为正在排序的列中的数据?您应该使用您正在处理的查询和模式以及您试图实现的结果来更新问题。@Nick。我更新了问题,提供了更多信息,如查询和schema@Madrid. 所以你现在得到的名字是这样的顺序:1,3,13036,101-2011-009X2,20-100281-01,ELO-001,ELO001B,ELO002B,但是你想要的是这样的顺序:ELO-001,ELO001B,ELO002B,1,3,13036,101-2011-009X2,20-100281-01?我打错了,这是你想要的顺序吗:101-2011-009X2,20-100281-01,ELO-001,ELO001B,ELO002B,1,1,3,13036?
SELECT 
    A.ID
,   A.Name
,   A.status
FROM 
(
    SELECT  
        dbo.base_project.id as ID
    ,   dbo.base_project.name as Name
    ,   dbo.base_project.status
    ,   1 as ordering
    ,   RIGHT(REPLICATE('0',21) + dbo.base_project.name, 20) As padded
    FROM dbo.base_project
    WHERE ISNUMERIC(dbo.base_project.name) = 1
UNION
    SELECT  
        dbo.base_project.id as ID
    ,   dbo.base_project.name as Name
    ,   dbo.base_project.status
    ,   0 as ordering
    ,   LEFT(dbo.base_project.name + REPLICATE('',21), 20) As padded
    FROM dbo.base_project
    WHERE ISNUMERIC(dbo.base_project.name) <> 1
) A
ORDER BY A.ordering, A.padded