Значения столбца для строки в Db2, как xargs в Linux - PullRequest
0 голосов
/ 11 октября 2018

Я хочу сделать следующее только в SQL:

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

Как я могу это сделать?Преобразуйте список значений в строку, как xargs в Linux.Я хочу что-то динамическое, не с 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 голосов
/ 11 октября 2018

Как насчет этого

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
0 голосов
/ 11 октября 2018

Вместо этого используйте функцию LISTAGG.

db2 -x "select listagg(colname, ' ') within group (order by colno) from syscat.columns where tabschema like 'SYSCAT%' and tabname = 'TABLES'" | xargs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...