我只想在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查询中起作用。
答案 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