sqloracle中的自定义顺序
我有一个表1,其中包含如下数据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
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