2016-07-26 3 views
0

サブクエリの結果をカンマ区切りの文字列としてHQLに表示する必要があります。HQLでは、select句でサブクエリの結果からカンマ区切りの文字列を取得する方法は?

select DEPARTMENT_ID, 
     (select FIRST_NAME 
      FROM EMPLOYEES 
     where DEPARTMENT_ID =90) as Employee_Names 
FROM DEPARTMENTS 
where DEPARTMENT_ID =90; 

select句のサブクエリ結果は、コンマ区切りの値として表示する必要があります。

何か助けが前もって評価されています。ありがとう。

+0

department_id' 'ことにより、2つのテーブル、グループに参加して[LISTAGG()群内()](http://docs.oracle.com/database/121/SQLRF/functions101.htm#SQLRF30030)関数を使用所望の結果が得られる。 –

+0

@ニコラス、返信ありがとう。しかし、私はHQLでこれを行う必要があります。 SQLではありません。 SQLでは、私はすでにその作業を試みました。私はそれが大きな影響を持つので、私は既存のHQL queyをSQLに変更できません。 – RaoPotla

答えて

2

2つの可能な解決策があります。

まず

オラクルでそれを行う:

select 
    d.DEPARTMENT_ID, 
    listagg(FIRST_NAME, ',') within group(order by FIRST_NAME) as Employee_Name 
FROM 
    DEPARTMENTS d join EMPLOYEES e 
    on d.DEPARTMENT_ID = e.DEPARTMENT_ID 
where  
    d.DEPARTMENT_ID = 90 
group by 
    d.DEPARTMENT_ID 

それは制限があります。concateneted文字列> 4000の全長は、コードが失敗した場合。

セカンド

私は、このコードは、あなたがすべてのFIRST_NAMEを収集することができますし、手動で(あなたのコードはJavaで動作する場合)ResultSetを読んで、あなたが好きなデータを組み合わせて、いくつかのレポートのために必要であると仮定します。 Oracleでは、オーバーヘッドを4000文字まで制限できます。

select 
    d.DEPARTMENT_ID, 
    FIRST_NAME as Employee_Name 
FROM 
    DEPARTMENTS d join EMPLOYEES e 
    on d.DEPARTMENT_ID = e.DEPARTMENT_ID 
where 
    d.DEPARTMENT_ID =90 
関連する問題