与Linux中的xargs相似的Db2中的行的列值

时间:2018-10-11 16:14:05

标签: sql database db2

我只想在SQL中执行以下操作:

db2 -x "select colname from syscat.columns where tabschema like 'SYSCAT%' and tabname = 'TABLES' order by colno" | xargs

我该怎么做?将值列表转换为一行,就像Linux中的xargs一样。 我想要动态的东西,而不是CASE,因为我需要更改表名并且结果应该是一行。

原始查询:

col1
col2
col3

在xargs之后

col1 col2 col3

我知道有一个名为ARRAY_AGG的函数,但它仅在复合块内起作用,而不在SQL查询中起作用。

https://www.ibm.com/support/knowledgecenter/en/SSEPGG_10.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0050494.html

2 个答案:

答案 0 :(得分:1)

改为使用LISTAGG函数。

db2 -x "select listagg(colname, ' ') within group (order by colno) from syscat.columns where tabschema like 'SYSCAT%' and tabname = 'TABLES'" | xargs

答案 1 :(得分:0)

怎么样

SELECT TABNAME
,      LISTAGG(COLNAME,',') WITHIN GROUP (ORDER BY COLNO) AS COLNAMES
FROM SYSCAT.COLUMNS
WHERE TABSCHEMA LIKE 'SYSCAT%'
GROUP BY TABNAME
ORDER BY TABNAME

它返回这样的输出

 TABNAME                        COLNAMES
 ------------------------------ -----------------------------------
 BUFFERPOOLDBPARTITIONS         BUFFERPOOLID,DBPARTITIONNUM,NPAGES
 BUFFERPOOLEXCEPTIONS           BUFFERPOOLID,MEMBER,NPAGES
 BUFFERPOOLNODES                BUFFERPOOLID,NODENUM,NPAGES