sql server—根据第一个字段的值使用不同字段进行sql排序

6bc51xsx  于 2021-08-09  发布在  Java
关注(0)|答案(3)|浏览(335)

尝试根据第一个字段值的大小对不同字段的数据进行排序。我以为这样行得通,但找不到错误

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\u style\u kind\u enum进行降序排序?

nkhmeac6

nkhmeac61#

Order By 
Case LGP_Colorway_PDC1_int when 10
    then    LGP_Style_Kind_enum
else        LGP_Colorway_PDC1_int
end,
            LGP_Colorway_PDC2_int,
            LGP_Colorway_PDC3_int,
            LGP_Style_SAPHrchyLvl2_enum,
            LGP_ShapeMaster_ManualCode_string

case语句的结果应该只是一个值,然后用逗号分隔其他值。您拥有它的方式类似于通过连接所有其他字段在代码中构建sql语句字符串的方式。
不管case语句中的逻辑遵循哪条路径,其余的排序顺序都是相同的。

gijlo24d

gijlo24d2#

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 永远不会 NULL . 如果可以的话 NULL ,那么逻辑需要考虑到这一点。

xfyts7mz

xfyts7mz3#

要根据需要订购和添加desc,我执行了以下代码:

Order By 
Case when LGP_Colorway_PDC1_int = 10 then LGP_Style_Kind_enum end desc,
Case when LGP_Colorway_PDC1_int <> 10 then LGP_Colorway_PDC1_int end,
LGP_Colorway_PDC2_int,
LGP_Colorway_PDC3_int,
LGP_Style_SAPHrchyLvl2_enum,
LGP_ShapeMaster_ManualCode_string

相关问题