2016-07-26 34 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'並使用[組內LISTAGG()()](http://docs.oracle.com/database/121/SQLRF/functions101.htm#SQLRF30030)函數以產生期望的結果。 –

+0

@Nicholas,謝謝你的回覆。但我需要在HQL中做到這一點。不在sql中。在SQL中,我已經嘗試過它的工作。我無法將現有的HQL quey更改爲SQL,因爲它具有重大影響。 – RaoPotla

回答

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,然後手動讀取ResultSet(如果你的代碼在Java中的作品),並根據需要合併的數據。那麼你可以在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 
相關問題