DB2:產生逗號分隔的群組值
本文探討在DB2 SQL中是否內建函數可以將群組內的列值連接起來,並以逗號分隔。這種函數的需求出現在多行共享同一個群組標識符(例如,範例中的ID)但其他列具有不同值(例如,Role)的情況下。期望的輸出是將與每個群組關聯的值連接成逗號分隔的清單。
解:使用LISTAGG函數
DB2 LUW 9.7 引入了LISTAGG函數,該函數能夠將每個組中指定列的值連接起來,並用使用者定義的分隔符號分隔。此函數可用於實現所需的逗號分隔輸出。
範例:
考慮以下帶有id和category列的myTable表:
<code class="language-sql">create table myTable (id int, category int); insert into myTable values (1, 1); insert into myTable values (2, 2); insert into myTable values (5, 1); insert into myTable values (3, 1); insert into myTable values (4, 2);</code>
要產生每個category群組中id值的逗號分隔列表,可以使用以下查詢:
<code class="language-sql">select category, LISTAGG(id, ', ') as ids from myTable group by category;</code>
此查詢將產生以下輸出:
<code>CATEGORY IDS --------- ----- 1 1, 5, 3 2 2, 4</code>
附加功能:
LISTAGG函數允許額外控制每個組中連接值的順序。透過在LISTAGG函數中指定ORDER BY子句,可以在連接之前控制值的排序順序。
例如,以下查詢將按升序排列每個category群組中的id值:
<code class="language-sql">select category, LISTAGG(id, ', ') WITHIN GROUP(ORDER BY id ASC) as ids from myTable group by category;</code>
這將產生以下輸出:
<code>CATEGORY IDS --------- ----- 1 1, 3, 5 2 2, 4</code>
以上是如何使用逗號分隔符號連接 DB2 群組中的列值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!