根据数据值以各种方式对sql查询结果进行排序

根据数据值以各种方式对sql查询结果进行排序,sql,sql-server,sql-order-by,Sql,Sql Server,Sql Order By,给定sql查询的以下结果: 1, 4, Red, Blue, 3, Green, 2, Yellow, Magneta, Rubi 我努力实现的正确顺序是: 红、蓝、绿、马格尼塔、鲁比、黄、1、2、3、4 红色、蓝色和绿色必须始终位于顶部,并按顺序排列 然后,alpha项应遵循asc顺序(M、R、Y) 后跟数字项,升序为(1、2、3…) 我一直在玩弄下面的东西,但是没有用,所以如果有人能给我指出正确的方向 SELECT myCol FROM myTable ORDER BY CASE WH

给定sql查询的以下结果:

1,
4,
Red,
Blue,
3,
Green,
2,
Yellow,
Magneta,
Rubi
我努力实现的正确顺序是:

红、蓝、绿、马格尼塔、鲁比、黄、1、2、3、4

  • 红色、蓝色和绿色必须始终位于顶部,并按顺序排列
  • 然后,alpha项应遵循asc顺序(M、R、Y)
  • 后跟数字项,升序为(1、2、3…)
我一直在玩弄下面的东西,但是没有用,所以如果有人能给我指出正确的方向

SELECT myCol FROM myTable
ORDER BY
CASE WHEN myCol='Red' then 1
     WHEN myCol='Blue' then 2
     WHEN myCol='Green' then 3 END,
CASE
     WHEN myCol not in ('Red','Blue','Green') and IsNumeric(party_id) = 0 then myCol END ASC,
CASE
     WHEN myCol not in ('Red','Blue','Green') and IsNumeric(party_id) = 1 then CAST(myCol AS INT) END ASC
谢谢

编辑1: 我当前的订单实际返回:

1,2,3,4, Magneta, Rubi, Yellow, Red, Blue, Green
你可以试试这个

SELECT myCol 
FROM myTable
ORDER BY
    CASE WHEN myCol='Red' THEN 1
        WHEN myCol='Blue' THEN 2
        WHEN myCol='Green' THEN 3 
        ELSE 4
    END,
    CASE
        WHEN myCol NOT IN ('Red','Blue','Green') AND IsNumeric(party_id) = 1 
            THEN CAST(myCol AS INT) 
        ELSE -1 
    END,
    CASE
        WHEN myCol NOT IN ('Red','Blue','Green') AND IsNumeric(party_id) = 0 
            THEN myCol 
    END;

您使用的是哪种数据库管理系统?(这里有一些特定于产品的SQL…)对不起,我忘了:MicrosoftSQL Server 2014工作得很有魅力!我真的很想对正在发生的事情发表一些评论,以便充分理解它。干杯对于您的问题,您可以使用
CASE
搜索并查看它,换句话说,如果您不设置值,那么默认值将为NULL,SQL Server将首先命令NULL,因此您会得到错误的结果。我的查询是一种为
CASE
设置默认值的方法,这样结果将按预期的3个组排序:RGB、number和其他varchar。