sql - 根据第一个字段的值使用不同字段进行 SQL 排序
问题描述
尝试根据第一个字段的值对具有不同字段的数据进行排序。我认为这会起作用,但我找不到错误
Order By
Case LGP_Colorway_PDC1_int when 10
then LGP_Style_Kind_enum,
LGP_Colorway_PDC2_int,
LGP_Colorway_PDC3_int,
LGP_Style_SAPHrchyLvl2_enum,
LGP_ShapeMaster_ManualCode_string
else LGP_Colorway_PDC1_int,
LGP_Colorway_PDC2_int,
LGP_Colorway_PDC3_int,
LGP_Style_SAPHrchyLvl2_enum,
LGP_ShapeMaster_ManualCode_string end
我的 SQL 在 'order by' 附近显示语法错误
此外,如何降序排序 LGP_Style_Kind_enum ?
解决方案
case
表达式返回单个值。逗号分隔的列表不是单个值。
case
您可以通过将其拆分为多个表达式来解决此问题:
Order By (case when LGP_Colorway_PDC1_int = 10 then LGP_Style_Kind_enum end),
(case when LGP_Colorway_PDC1_int = 10 then LGP_Colorway_PDC2_int end),
(case when LGP_Colorway_PDC1_int = 10 then LGP_Colorway_PDC3_int end),
(case when LGP_Colorway_PDC1_int = 10 then LGP_Style_SAPHrchyLvl2_enum end),
(case when LGP_Colorway_PDC1_int = 10 then LGP_ShapeMaster_ManualCode_string end),
(case when LGP_Colorway_PDC1_int <> 10 then LGP_Colorway_PDC1_int end),
(case when LGP_Colorway_PDC1_int <> 10 then LGP_Colorway_PDC2_int end),
(case when LGP_Colorway_PDC1_int <> 10 then LGP_Colorway_PDC3_int end),
(case when LGP_Colorway_PDC1_int <> 10 then LGP_Style_SAPHrchyLvl2_enum end),
(case when LGP_Colorway_PDC1_int <> 10 then LGP_ShapeMaster_ManualCode_string end)
请注意,这会将每个列引用拆分为自己的case
表达式。那是故意的。否则,您必须确保类型兼容——如果不兼容,可能会出错。
此外,这使用<>
假设LGP_Colorway_PDC1_int
是 never NULL
。如果可以NULL
,那么逻辑需要考虑到这一点。
推荐阅读
- mysql - MySQL按两个字段排序,集群字段
- jquery - 获取活动的 href 导航链接的值
- javascript - 如何从对象中获取值
- typescript - 带有 Typescript Vuex 对象的 Vue Vuex 未知类型
- python - 在python中的日期列上使用数据透视函数
- angular - 从 Angular 8 并行处理多个 API 请求
- amazon-web-services - 将 AWS SecretManager 与 Fargate 一起使用:无法找到凭证
- python - 更改moviepy audioClip的保存位置
- vue.js - 使用 Vuex getter 时 state.user 为 null
- excel - 如何在 Excel VBA 中刷新所有内容?