【问题标题】:sort grouped rows itself in oracle Spring/JPA在oracle Spring / JPA中对分组的行本身进行排序
【发布时间】:2016-02-18 20:35:52
【问题描述】:

我有“行”表和相关的“单元”表(OneToMany)。

我必须选择文档的所有行。进行左连接会带来每行的所有单元格。

Row_id    Cell   
1          1A
1          1B
1          1C
1          1D

2          2A
2          2B
2          2C
2          2D

假设每个单元格都有与关系的列索引,那么也存在列表。 (A 第一列,B 第二列等)

      A   B   C   D
1 - [1A, 1B, 1C, 1D]
2 - [2A, 2B, 2C, 2D]

如果用户有此文档并想按 A 列排序,那么 JPA/Oracle 中的最佳方法是什么?我必须在给定的列索引中按单元格对行组进行物理排序。

例如第一列的描述

Row_id    Cell   

2          2A
2          2B
2          2C
2          2D

1          1A
1          1B
1          1C
1          1D

或按行 ID 分组,并按给定列索引的选定单元格排序。

然后我已经订购了行 ID 列表。但是是否有保证的方法来获取与指定 row_id 顺序的单元格连接的所有行?

【问题讨论】:

    标签: java spring oracle jpa


    【解决方案1】:

    目前这对我来说是最好的解决方案。首先我选择我想要排序的列。排序分页。取row_id,然后在主查询中选择与这个row_ids相关的所有字段数据,因为in子句不保持顺序,所以不能保证。

    SELECT doc_row.id ,
      doc_row.delimiter_delimiter_id,
      user_username ,
      doc_row.isdraft,
      LISTAGG(NVL(value, ''), ',') WITHIN GROUP (
    ORDER BY col_index) AS cells
    FROM data
    LEFT JOIN field
    ON field.field_id = field_field_id
    LEFT JOIN doc_row
    ON doc_row.id = data.row_id
    WHERE row_id IN
      (SELECT q
      FROM
        (SELECT my_query.row_id q,
          rownum rn
        FROM
          (SELECT row_id
          FROM data
          LEFT JOIN doc_row
          ON data.row_id                = doc_row.id
          WHERE delimiter_delimiter_id IN (1)
          AND field_field_id            = (3)
          ORDER BY to_date(value,'DD/MM/YYYY')
          ) my_query
        WHERE rownum <= (2000)
        )
      WHERE rn >= (0)
      )
    GROUP BY doc_row.id ,
      delimiter_delimiter_id,
      user_username,
      isdraft
    ORDER BY to_date(REGEXP_SUBSTR(cells, '[^,]+',1,(3)),'DD/MM/YYYY')
    

    【讨论】:

      猜你喜欢
      • 2020-08-24
      • 1970-01-01
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-03
      • 1970-01-01
      • 2022-06-10
      相关资源
      最近更新 更多