从MIN到MAX的ORDER BY

时间:2014-07-11 18:22:49

标签: sql sql-server-2008

我是SQL Server的新手。我有一点问题,我无法查找。关键是我无法在我的列STATEID中获取数据的顺序,我想从最小到最大订购它。我使用的是ORDER BYASC,但它无效。在其他方面,我可以从列STATEID中获得最小到最大的确切序列。我正在使用SQL Server 2008.

这是我的代码示例。

ALTER PROCEDURE [dbo].[basicGatherSelect]
    @StateID            nvarchar(5),    
    @Name               nvarchar(50)
AS
BEGIN 
    BEGIN TRANSACTION 

    SET NOCOUNT ON;

    SELECT  
       StateID, name
    FROM 
        tblState 
    ORDER BY 
        STATEID ASC

    IF  @@error <> 0
    BEGIN
            ROLLBACK
            RAISERROR ('PROBLEM', 16, 1)
            RETURN
    END

    COMMIT
END

结果:

  • 10 Liban
  • 3 Rusia
  • 4 Letonija
  • 5 Austrija
  • 7 BARAZIL
  • 8 Njemacka
  • 9阿根廷
  • 1 Srbija
  • 2 Bosna

2 个答案:

答案 0 :(得分:1)

试试这个:

ALTER PROCEDURE [dbo].[basicGatherSelect]
    @StateID            nvarchar(5),    
    @Name               nvarchar(50)
AS
BEGIN 
    BEGIN TRANSACTION 

    SET NOCOUNT ON;

    SELECT  
       StateID, name
    FROM 
        tblState 
    ORDER BY 
        CAST(STATEID AS INT) ASC

    IF  @@error <> 0
    BEGIN
            ROLLBACK
            RAISERROR ('PROBLEM', 16, 1)
            RETURN
    END

    COMMIT
END

答案 1 :(得分:0)

如果您无法控制参数的来源(因此您无法将其更改为int)

按字母顺序排序会使其将字符处理的其他字符视为一种考虑因素。

如果你的东西有21件......它会......

1,10,11,12 ....等,2,20,21,3,4 ......等等。

你总是可以将一个强制转换为int来进行排序(假设ID总是一个数字):

ORDER BY 
    CAST(@StateID AS INT) ASC

关于这篇文章的更多信息:SQL ORDER chars numerically