2016-11-22 103 views
1

我需要根據行所屬的哪個組使用兩個分組值來將行值連接到列中。通過組合組的SQL連接行

TBL1

cat1 cat2 cat3 value 
    ---- ---- ---- ----- 
    1 1 lvl1 100 
    1 2 lvl2 abc 
    1 3 lvl2 cba 
    2 1 lvl1 200 
    2 2 lvl2 abb 
    3 1 lvl1 100 
    3 2 lvl2 bbc 
    3 3 lvl2 acc 
    3 4 lvl1 400 
    3 5 lvl2 acc 
    4 1 lvl1 300 
    4 2 lvl2 aab 
    ... 

TBL2

cat1 cat2 value 
    ---- ---- --------- 
    1 100 abc, cba 
    2 200 abb 
    3 100 bbc, aac 
    3 400 aac 
    4 300 aab 
    ... 

這是使用靜態DB2 SQL。實際的表格有超過一千條記錄。

+0

什麼是DB2版本和平臺? – mustaccio

+0

DBMS_Ver - 11.01.0005 – Jorge

回答

2

至少某些版本的DB2支持listagg()。所以棘手的部分是確定組。您可以通過累計計算值爲數字的行數來完成此操作。由此產生的查詢是這樣的:

select cat1, 
     max(case when value >= '0' and value <= '999' then value end) as cat2, 
     listagg(case when not value >= '0' and value <= '999' then value end, ', ') within group (order by cat2) as value 
from (select t.*, 
      sum(case when value >= '0' and value <= '999' then 1 else 0 end) over (order by cat1, cat2) as grp 
     from t 
    ) t 
group by cat1, grp; 

檢查在DB2中的數字可能會很棘手。以上使用邏輯對於您的示例數據足夠簡單。

+0

我不知道你是如何理解他所問的。 – Hogan

+0

@霍根。 。 。我從這個網站學到的兩件最重要的事情之一是如何理解別人的要求 - 至少在這個非常有限的技術領域。 –