Java 使用来自两个不同列的值对SQL进行排序
假设我有一个表名,其中列PART_TYPE和VALUE。每个类型可以有多个类型,如族、给定、前缀等 我想做的是编写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 但我不确定如何将其他
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
?但我需要类型按特定顺序排列,而不是按默认顺序排列。所以,我需要它先按给定排序,然后按族排序。但是我需要类型按特定的顺序排序,而不是按默认的顺序排序。所以,我需要它首先按给定值排序,然后按族排序。幸运的是,我只需要担心两种类型,它应该是一致的。幸运的是,我只需要担心两种类型,它应该是一致的。