【问题标题】:Order By Twice Within A Column在一列内按两次排序
【发布时间】:2012-05-12 08:06:33
【问题描述】:

假设我们有一个这样的 NAME 表:

PERSON_ID   PART_TYPE   VALUE

PERSON_ID 是对PERSON 的外键引用。

PART_TYPE 内部将是 FAMILYGIVENPREFIXSUFFIX 等值。值自然是实际值。

您将如何编写一个 SQL 查询(更不用说 Hibernate)以按 PART_TYPE 排序,然后按 VALUE 排序 FAMILY PART_TYPE,然后 VALUE 排序 GIVEN @ 987654335@?

考虑一下你有这三个人的场景:

Given3 Family10
Given5 Family10
Given7 Family10

使用这条 SQL:

SELECT this_.person_id, name1_.part_type, name1_.value
FROM person this_
LEFT OUTER JOIN name name1_
ON this_.person_id       =name1_.person_id
ORDER BY (
  CASE
    WHEN name1_.PART_TYPE = 'FAMILY'
    THEN 0
    WHEN name1_.PART_TYPE = 'GIVEN'
    THEN 1
  END),
  name1_.VALUE,

我明白了:

  ID2  FAM Family10
  ID1  FAM Family10
  ID3  FAM Family10
  ID4  GIV Given3
  ID5  GIV Given5
  ID6  GIV Given7

我想要:

ID1  FAM Family10
      ID2  FAM Family10
      ID3  FAM Family10
      ID4  GIV Given3
      ID5  GIV Given5
      ID6  GIV Given7

因此,当前状态下的那些 Family10 行的顺序是不确定的——它可以是 ID1、ID2 和 ID3 的任意组合。我希望它们根据给定值排序。我真的不知道该怎么做,即使有多个 select 语句。

我想这样做的原因是因为我想获取这些人员 ID,并且我可以在我的末端进行一些过滤以获取不同的人员 ID 并对其执行一些分页逻辑,然后实际加载人员(从而减少在很多 SQL 调用上)。我目前无法更改数据库架构。

【问题讨论】:

  • 如果有人能想到更好的描述方式,可以随意编辑标题行。我为此苦苦挣扎。
  • 你能举个例子说明你想要的输出吗?你现在有什么 ORDER BY ?也许我读错了,但我有点困惑
  • @dweiss 我添加了一个我想要的示例。这更清楚了吗?我还更改了 ID 以减少混乱。不过,我在发布的 SQL sn-p 中确实有 ORDER BY 子句。

标签: java sql oracle hibernate sorting


【解决方案1】:

这与您所要求的有点不同,但也许它会有所帮助 - 它提供了每个人的家庭和名字。

SELECT this_.person_id, family.value as family, given.value as given
FROM person this_
LEFT OUTER JOIN name family
    ON this_.person_id = family.person_id
    and family.PART_TYPE = 'FAMILY'
LEFT OUTER JOIN name given_
    ON this_.person_id = given.person_id
    and given.PART_TYPE = 'GIVEN'
ORDER BY family.value, given.value

【讨论】:

  • 看起来是正确的。哇,你真棒!我会接受这一点。你有没有机会知道如何在 Hibernate 中做到这一点?
  • 对不起,我对 Hibernate 一点也不熟悉。我相信其他人可以帮助你。
猜你喜欢
  • 1970-01-01
  • 2012-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-23
  • 2012-10-19
相关资源
最近更新 更多