2017-05-29 80 views
-3

數據庫中的表具有列a,b,c。數據庫中的每兩行在列c中具有相同的值。我想要獲取並存儲這些對以用於下一個操作。 我正在使用休眠(但不是標準接口)。 什麼是最佳解決方案?選擇行的所有字段並根據一列對它們進行分組

人實體:

+--------------+----+-------+---+ 
| person Object| a |b  | c | 
+--------------+----+-------+---+ 
|  p1  | w | d  | 1 | 
|  p2  | d | d  | 2 | 
|  p3  | f | e  | 3 | 
|  p4  | x | f  | 1 | 
|  p5  | w | g  | 2 | 
|  p6  | g | s  | 3 | 
|  p7  | x | h  |null| 
|  p8  | q | null | 4 | 
|  p9  | w | null |null| 

預期輸出: 對甲列表行以相同的 「C」:[{P1,P4},{P2,P5},{P3,P6}]

p1是從實體中檢索hibernate對象而不是字符串或列。 p1是第一行的對象。我想獲得一對hibernate對象,一對行。

+1

你的問題還不清楚,舉一些例子說明數據和需要輸出什麼。 – Ramki

+0

@Ramki我編輯了我的帖子。謝謝你的 – faraa

+1

你可以試試LISTAGG()這會給多個 行值int單列搜索網絡中的一些例子https://www.techonthenet.com/oracle/functions/listagg.php – Ramki

回答

0
with data (rn, person, a, b, c) as 
(
    select rownum rn, t.* from 
    (
    select  'p1',   'w' , 'd'  , 1 from dual union all 
    select  'p2',   'd' , 'd'  , 2 from dual union all 
    select  'p3',   'f' , 'e'  , 3 from dual union all 
    select  'p4',   'x' , 'f'  , 1 from dual union all 
    select  'p5',   'w' , 'g'  , 2 from dual union all 
    select  'p6',   'g' , 's'  , 3 from dual union all 
    select  'p7',   'x' , 'h'  , null from dual union all 
    select  'p8',   'q' , null , 4 from dual union all 
    select  'p9',   'w' , null , null from dual 
    ) t 
) 
, 
cte (rn, person, a, b, c, pair) as 
(
    select rn, person, a, b, c, null from data 
    union all 
    select data.rn, null, null, null, null, '{' || cte.person || ',' || data.person || '}' from cte join data on (cte.c = data.c and cte.rn < data.rn) 
) 
select 
    '"C":' || 
    '[' || listagg(pair, ',') within group(order by rn) || ']' result 
from cte 
where pair is not null; 
+0

對不起。我認爲我的輸入不清楚...我假設p1作爲從實體檢索到的hibernate對象而不是字符串和列。 p1是第一行的對象 – faraa

相關問題