在 oracle Spring/JPA 中对分组行本身进行排序



我有"行"表和相关的"单元格"表(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 中的最佳方法是什么?我必须在给定的列索引中按单元格对物理行组进行排序。

例如,第一列的 Desc

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

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

然后我已经订购了行 ID 列表.但是有没有一种保证的方法可以按指定的row_id顺序获取与单元格连接的所有行?

目前,这对我来说是最好的解决方案。首先,我选择要排序的列,排序paginate.take 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')

最新更新