2016-05-02 7 views
0

В Netezza функция GROUP_CONCAT не поддерживает ORDER BY, она использует собственный внутренний порядок, который является порядком по столбцу, который вы используете в качестве параметра.Устранение недостатка ORDER BY при использовании GROUP_CONCAT в Netezza

SELECT 'GROUP BY '||TOOLKIT.SQLEXT.GROUP_CONCAT(PRIMARY_KEY, ', ') AS GROUP_BY 
FROM (
SELECT 1 AS SEQ, 'DATA_DATE' AS PRIMARY_KEY 
UNION ALL 
SELECT 2 AS SEQ, 'ACCT_ID' AS PRIMARY_KEY 
) S; 

Это вернет:

 
 GROUP_BY 
GROUP BY ACCT_ID, DATA_DATE 

Но как получить результат заказ SEQ вместо primary_key, чтобы получить результат, как это:

 
 GROUP_BY 
GROUP BY DATA_DATE, ACCT_ID 

ответ

0

Мы можем добавить SEQ в начале первого GROUP_CONCAT, чтобы заставить внутренний ORDER BY работать для нас, а затем удалить то, что мы добавили. Чтобы безопасно удалить, мы добавили дополнительные «@» в начале и в конце последовательности.

SELECT 'GROUP BY '||TOOLKIT.SQLEXT.REGEXP_REPLACE(
        TOOLKIT.SQLEXT.GROUP_CONCAT('@'||LPAD(SEQ, 4, '0')||'@' 
        ||PRIMARY_KEY, ', '), 
        '@[0-9]{4}@', '') AS GROUP_BY 
FROM (
SELECT 1 AS SEQ, 'DATA_DATE' AS PRIMARY_KEY 
UNION ALL 
SELECT 2 AS SEQ, 'ACCT_ID' AS PRIMARY_KEY 
) S; 

Это вернет то, что мы хотим:

 
GROUP_BY 
GROUP BY DATA_DATE, ACCT_ID 

 Смежные вопросы

  • Нет связанных вопросов^_^