2014-12-30 16 views
0

我有一個SQL表(3列:數字,數字,字符串)在PostgreSQL的形式 -deliminator列值

100226, 118, "{{5662,"IBM Certified for On Demand Business - Solution Advisor - 816"},{5663,"MS Windows XP Desktop Administration - Assessment - E1"},{5664,"MS Windows 95 Navigation - Assessment - E3"},{5671,"TestPrep Final Exam: Six Sigma Foundations"}" 

現在,我的要求是獲得該行的形式如下

100226 118 {5662,"IBM Certified for On Demand Business - Solution Advisor - 816"} 
       {5663,"MS Windows XP Desktop Administration - Assessment - E1"} 
       {5664,"MS Windows 95 Navigation - Assessment - E3"} 
       {5671,"TestPrep Final Exam: Six Sigma Foundations"} 

以下是通過我檢索值

select 
    chs.lms_im_employee_id emp_num, 
    chs.lms_mr_cp_id complaince_no, 
    entity_name 
from 
    lms.lms_im_cmplnc_objtemp obj, 
    lms.lms_im_cmplnc_history chs 
where 
    obj.lms_mr_cp_id=chs.lms_mr_cp_id 
    and obj.lms_im_employee_id = chs.lms_im_employee_id  
    and chs.lms_im_ch_is_compliant = false 
    and chs.lms_im_employee_id = '66' 
group by chs.lms_mr_cp_id, chs.lms_im_employee_id; 
+0

什麼是Postgresql版本? 「select version()' –

+0

」x86_64-unknown-linux-gnu上的EnterpriseDB 9.3.1.3,由gcc編譯(GCC)4.1.2 20080704(Red Hat 4.1.2-52),64位「 – user3869192

回答

0

首先,如果可能的話,你的存儲STRI查詢ng將是有益的,但如果不是, 請嘗試以下內容

現在,您的數據看起來有點畸形,因爲它缺少最後一個}。在這個答案中,我認爲這是一個錯誤,如果不是這樣,你將不得不清理你的數據,或者重寫我的查詢以在原始數據的末尾追加'}'。

select 
    chs.lms_im_employee_id emp_num, 
    chs.lms_mr_cp_id complaince_no, 
    json_array_elements(array_to_json(entity_name::text[])) entity_name 
from 
    lms.lms_im_cmplnc_objtemp obj, 
    lms.lms_im_cmplnc_history chs 
where 
    obj.lms_mr_cp_id=chs.lms_mr_cp_id 
    and obj.lms_im_employee_id = chs.lms_im_employee_id  
    and chs.lms_im_ch_is_compliant = false 
    and chs.lms_im_employee_id = '66' 
group by chs.lms_mr_cp_id, chs.lms_im_employee_id; 

,或者,如果你的數據實際上是在缺少收盤}

select 
    chs.lms_im_employee_id emp_num, 
    chs.lms_mr_cp_id complaince_no, 
    json_array_elements(array_to_json((entity_name||'}')::text[])) entity_name 
from 
    lms.lms_im_cmplnc_objtemp obj, 
    lms.lms_im_cmplnc_history chs 
where 
    obj.lms_mr_cp_id=chs.lms_mr_cp_id 
    and obj.lms_im_employee_id = chs.lms_im_employee_id  
    and chs.lms_im_ch_is_compliant = false 
    and chs.lms_im_employee_id = '66' 
group by chs.lms_mr_cp_id, chs.lms_im_employee_id; 
當然

這一切假設你的數據是完全格式化。如果不是,那麼你將不得不清理你的數據,或寫一個自定義函數來解釋它。