2017-05-29 4 views
-3

Die Tabelle in der Datenbank hat Spalte a, b, c. Beide Zeilen in der Datenbank haben die gleichen Werte in der Spalte c. Ich möchte diese Paare für die nächsten Operationen erhalten und speichern. Ich verwende Hibernate (Aber nicht Kriterien Schnittstelle). Was ist die beste Lösung?Wählen Sie alle Felder von Zeilen und gruppieren sie basierend auf einer Spalte

Personenentität:

+--------------+----+-------+---+ 
| 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| 

erwartete Ausgabe: eine Liste von Paaren mit derselben "C" Zeile: [{p1, p4}, {P2, P5}, {p3, p6}]

p1 wird Hibernate-Objekt von Entität abgerufen, keine Zeichenfolge oder Spalte. p1 ist Objekt der ersten Zeile. Ich möchte ein paar Hibernate-Objekte erhalten, ein Paar Zeilen.

+1

Ihre Frage ist nicht klar, geben Sie ein Beispiel mit Daten und welche Ausgabe benötigt wird. – Ramki

+0

@Ramki Ich habe meinen Beitrag bearbeitet. Thanks – faraa

+1

können Sie versuchen, LISTAGG() gibt dies mehrere Zeilenwerte Int einzelne Spalte suchen ein Beispiel in Internet https://www.techonthenet.com/oracle/functions/listagg.php – Ramki

Antwort

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

sorry..Ich denke, meine Eingabe war nicht klar ... Ich nahm p1 als abgerufenen Hibernate-Objekt von der Entität nicht eine Zeichenfolge und eine Spalte. p1 ist Objekt der ersten Zeile – faraa

Verwandte Themen