sqloracle中的自定义顺序

sqloracle中的自定义顺序,sql,oracle,Sql,Oracle,我有一个表1,其中包含如下数据 group_name model_no model_year cost mech 9000 2015 200 mech 9012 2015 300 mech allmodelno 2015 500 cs 9000 2016 600 cs 9012 2016

我有一个表1,其中包含如下数据

group_name model_no    model_year   cost
mech        9000        2015         200
mech        9012        2015         300
mech        allmodelno  2015         500
cs           9000       2016         600
cs           9012       2016         400
cs          allmodelno  2016         1000
我希望输出是

group_name model_no    model_year   cost
    mech        9000        2015         200
    mech        9012        2015         300
    cs          9000        2016         600
    cs          9012        2016         400
    mech        allmodelno  2015         500
    cs          allmodelno  2016         1000
我尝试了“从表1中选择*按型号订购编号,型号为”

我得到的结果是

      group_name model_no    model_year   cost
        mech        9000        2015         200
        cs          9000        2016         600
        mech       9012        2015         300
        cs          9012        2016         400
        mech        allmodelno  2015         500
        cs          allmodelno  2016         1000
  group_name model_no    model_year   cost
    cs          9000        2016         600
    cs          9012        2016         400
    cs          allmodelno  2016         1000
    mech        9000        2015         200
    mech        9012         2015        300
    mech        allmodelno  2015         500
这是错误的,因为组名称没有按预期出现

如果我使用“按组名称、型号、年份从表1中选择*订单”,则得到的结果如下

      group_name model_no    model_year   cost
        mech        9000        2015         200
        cs          9000        2016         600
        mech       9012        2015         300
        cs          9012        2016         400
        mech        allmodelno  2015         500
        cs          allmodelno  2016         1000
  group_name model_no    model_year   cost
    cs          9000        2016         600
    cs          9012        2016         400
    cs          allmodelno  2016         1000
    mech        9000        2015         200
    mech        9012         2015        300
    mech        allmodelno  2015         500
同样,该系列并不像预期的那样,我希望最终输出的顺序如下

   group_name model_no    model_year   cost
    cs          9000        2016         600
    cs          9012        2016         400
    mech        9000        2015         200
    mech        9012        2015         300  
    cs          allmodelno  2016         1000
    mech        allmodelno  2015         500
可以通过订单或其他方式完成吗?请帮助我。谢谢

注意:'My logic explained in detail'allmodelno行是各集团名称和车型年份的小计。我希望所有'all model no'记录都位于表的底部

首先,我希望正常记录(不包括小计)按组名称、型号编号、型号年份的顺序列在顶部

然后我将得到以下输出,该输出为表“正常”

group_name model_no    model_year   cost
cs          9000        2016         600
cs          9012        2016         400
mech        9000        2015         200
mech        9012        2015         300 
    cs          allmodelno  2016         1000
    mech        allmodelno  2015         500
然后,我希望小计采用相同的订单组名称、型号和年份,如下所示。此处不采用型号,因为所有小计都是相同的“allmodelno”,即表“小计”

group_name model_no    model_year   cost
cs          9000        2016         600
cs          9012        2016         400
mech        9000        2015         200
mech        9012        2015         300 
    cs          allmodelno  2016         1000
    mech        allmodelno  2015         500
我把两者都合并了,但顺序应该是一致的

 group_name model_no    model_year   cost
        cs          9000        2016         600
        cs          9012        2016         400
        mech        9000        2015         200
        mech        9012        2015         300  
        cs          allmodelno  2016         1000
        mech        allmodelno  2015         500
但是我把它弄得乱七八糟

group_name model_no    model_year   cost
        cs          9000        2016         600
        cs          9012        2016         400
        cs          allmodelno  2016         1000
        mech        9000        2015         200
        mech        9012         2015        300
        mech        allmodelno  2015         500
试试这个:

SELECT *
FROM Table1 T
ORDER BY
  CASE
      WHEN model_name || model_no like '%allmodelno' THEN 1
      ELSE 0
  END,
  model_year

使用
ORDER BY
中的
case
表达式将所有modelno行排序在其他行之后:

select * from table1
order by case when model_no <> 'allmodelno' then 1 else 2 end,
         model_year, group_name, model_no;
从表1中选择*
当型号为“allmodelno”时,按情况订购,然后1个其他2个结束,
型号年份、集团名称、型号;
执行为:

SQL>select * from table1
SQL&order by case when model_no <> 'allmodelno' then 1 else 2 end,
SQL&         model_year, group_name, model_no;
group_name model_no    model_year        cost
========== ========== =========== ===========
mech       9000              2015         200
mech       9012              2015         300
cs         9000              2016         600
cs         9012              2016         400
mech       allmodelno        2015         500
cs         allmodelno        2016        1000

                  6 rows found
SQL>从表1中选择*
SQL&当型号为“allmodelno”时,按案例排序,然后1其他2结束,
SQL和型号年份、组名称、型号编号;
集团名称型号无型号年份成本
========== ========== =========== ===========
机械9000 2015 200
机械9012 2015 300
cs 9000 2016 600
cs 9012 2016 400
机械所有型号2015 500
cs allmodelno 2016 1000
找到6行

注意:表中是否存储了allmodelno行?看起来有点冒险。如果插入/更新/删除行,则allmodelno行将不一致。最好计算allmodelno运行时(例如使用视图)。

我不知道,但您的预期输出似乎根本没有顺序。它不是按任何特定列排序的。请解释您需要用于排序的逻辑。示例数据不足以确定您想要的顺序。请编辑这个问题并解释一下你想应用什么规则好吗?看起来你的设计有点奇怪。可能您不应该在表中存储allmodelno行。您请求的输出对我来说没有任何意义。你到底想要什么?作为一个侧节点,请记住,
model\u no
似乎是一个
char
,它将为数字创建一个字母顺序,而不是一个数字顺序。是的,随着数据的发布,我希望我们的OP有一个值模式,如果他希望所有的模型都使用allmodelno