Java 使用来自两个不同列的值对SQL进行排序

Java 使用来自两个不同列的值对SQL进行排序,java,sql,oracle,hibernate,sql-order-by,Java,Sql,Oracle,Hibernate,Sql Order By,假设我有一个表名,其中列PART_TYPE和VALUE。每个类型可以有多个类型,如族、给定、前缀等 我想做的是编写SQL来获取所有的名称,但首先让它们按特定类型排序,然后在该类型中按字母顺序排序 我有这样的想法: SELECT * FROM name ORDER BY ( CASE WHEN PART_TYPE = 'GIV' THEN VALUE END) GIVEN A GIVEN B GIVEN C FAMILY A FAMILY B 但我不确定如何将其他

假设我有一个表名,其中列PART_TYPE和VALUE。每个类型可以有多个类型,如族、给定、前缀等

我想做的是编写SQL来获取所有的名称,但首先让它们按特定类型排序,然后在该类型中按字母顺序排序

我有这样的想法:

SELECT *
FROM name
ORDER BY (
  CASE
    WHEN PART_TYPE = 'GIV'
    THEN VALUE
  END)
GIVEN  A
GIVEN  B
GIVEN  C
FAMILY A
FAMILY B
但我不确定如何将其他类型作为主顺序包含,同时将值保留为次顺序。添加另一个case语句将使VALUE成为主要顺序

我想保持这个数据库的独立性,但如果需要的话,我愿意使它特定于Oracle

我该怎么做?另外,使用Hibernate标准执行此操作的方法也将非常受欢迎

编辑:我需要按照我定义的特定顺序来订购零件类型。特别是,它需要得到家庭的支持

所以它应该是这样的:

SELECT *
FROM name
ORDER BY (
  CASE
    WHEN PART_TYPE = 'GIV'
    THEN VALUE
  END)
GIVEN  A
GIVEN  B
GIVEN  C
FAMILY A
FAMILY B
自然秩序由家庭优先,而不是给予

SELECT *
FROM name
ORDER BY 
  CASE 
        WHEN TYPE = 'GIVEN' THEN 1
        WHEN TYPE = 'FAMILY' THEN 2
        ELSE 3
     END,
  VALUE
这将按自定义顺序对结果进行排序,并将类型和值作为次要顺序

ORDER BY CASE TYPE
             WHEN 'GIVEN' THEN 0   
             WHEN 'FAMILY' THEN 1
             ELSE 2
         END,
         VALUE

这将按照类型和值的自定义顺序对结果进行排序,作为二级顺序。

解决此问题的最易管理的方法可能是创建一个包含所有类型的表,然后在其中创建一个排序列。因此,您可能会有一个如下表:

ORDER BY CASE TYPE
             WHEN 'GIVEN' THEN 0   
             WHEN 'FAMILY' THEN 1
             ELSE 2
         END,
         VALUE
TypeID      Name      SortOrder
1           FAMILY    2
2           GIVEN     1
3           PREFIX    3
然后,您可以将其加入到查询中并使用:

ORDER BY SortOrder, Value
您可以使用
CASE
表达式来解决这个问题

ORDER BY CASE Type
            WHEN 'GIVEN' THEN 1
            WHEN 'FAMILY' THEN 2
            WHEN 'PREFIX' THEN 3
            END,
            Value

但是类型越多,case表达式的可管理性就越差。

解决这一问题的最易管理的方法可能是使用一个包含所有类型的表,然后在其中添加一个排序列。因此,您可能会有一个如下表:

TypeID      Name      SortOrder
1           FAMILY    2
2           GIVEN     1
3           PREFIX    3
然后,您可以将其加入到查询中并使用:

ORDER BY SortOrder, Value
您可以使用
CASE
表达式来解决这个问题

ORDER BY CASE Type
            WHEN 'GIVEN' THEN 1
            WHEN 'FAMILY' THEN 2
            WHEN 'PREFIX' THEN 3
            END,
            Value

但是类型越多,大小写表达式就越难管理。

感觉有点“黑”,但它可以工作

SELECT part_type,name
FROM (
SELECT 
CASE 
WHEN part_type = 'Given' THEN 'A'
WHEN part_type = 'Family' THEN 'B'
END AS Sorthack,
part_type,
name
FROM NAME
) Sort

ORDER BY sorthack,name

感觉有点“黑”,但它可以工作

SELECT part_type,name
FROM (
SELECT 
CASE 
WHEN part_type = 'Given' THEN 'A'
WHEN part_type = 'Family' THEN 'B'
END AS Sorthack,
part_type,
name
FROM NAME
) Sort

ORDER BY sorthack,name

按类型、值排序
?@zerkms如何确保类型按给定的系列排序?这是一个与此问题类似的问题:感谢您的回答。我想看看是否有人有这个版本的Hibernate标准。如果几个小时内没有人出现,我仍然会接受答案。
按部分排序\u type DESC,value
按类型排序,value
?@zerkms如何确保该类型按给定的家庭排序?这是一个与此问题类似的问题:感谢您的回答。我想看看是否有人有这个版本的Hibernate标准。如果几个小时内没有出现,我仍然会接受答案。
按部分排序\u type DESC,value
?但我需要类型按特定顺序排列,而不是按默认顺序排列。所以,我需要它先按给定排序,然后按族排序。但是我需要类型按特定的顺序排序,而不是按默认的顺序排序。所以,我需要它首先按给定值排序,然后按族排序。幸运的是,我只需要担心两种类型,它应该是一致的。幸运的是,我只需要担心两种类型,它应该是一致的。