Как устранить повторяющиеся строки в JSON_ARRAYAGG в DB2400 или в любом SQL? - PullRequest
2 голосов
/ 07 апреля 2020

SQL Пример ...

SELECT
    ID AS HID,
    JSON_ARRAYAGG(    
       JSON_OBJECT('sequence': TRIM(SEQUENCE),                         
                   'payer_reference_qualifier': TRIM(PAYREFQUAL),      
                   'payer_reference_id': TRIM(PAYREFID),               
                   'transaction_processing_status': TRIM(TRNPRCST) 
                   )) AS H1
FROM XXXXX
WHERE ID = 7146 
GROUP BY MSGHSTID;

Полученные данные: Я хочу получить только одну строку вместо двух строк. Есть идеи?

[
    {"sequence":"1","payer_reference_qualifier":"04","payer_reference_id":"EPIDETPMT0000000001","transaction_processing_status":"E"},
    {"sequence":"1","payer_reference_qualifier":"04","payer_reference_id":"EPIDETPMT0000000001","transaction_processing_status":"E"}
]

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Вы можете использовать LISTAGG:

SELECT '[' || listagg(DISTINCT a, ',') || ']'
FROM (VALUES('a'),('a'),('b')) t(a)

В вашем случае:

SELECT
    ID AS HID,
    '[' || LISTAGG(    
       JSON_OBJECT('sequence': TRIM(SEQUENCE),                         
                   'payer_reference_qualifier': TRIM(PAYREFQUAL),      
                   'payer_reference_id': TRIM(PAYREFID),               
                   'transaction_processing_status': TRIM(TRNPRCST) 
                   )) || ']' AS H1
FROM XXXXX
WHERE ID = 7146 
GROUP BY MSGHSTID;

Если вы намереваетесь вложить этот массив JSON в другие JSON_OBJECT структуры, дона не забудьте FORMAT JSON предложение там

0 голосов
/ 07 апреля 2020

Одна опция использует distinct в подзапросе:

SELECT 
    ID AS HID,
    JSON_ARRAYAGG(    
        JSON_OBJECT(
            'sequence': SEQUENCE,                         
            'payer_reference_qualifier': PAYREFQUAL,
            'payer_reference_id': PAYREFID,
            'transaction_processing_status': TRNPRCST
        )
    ) AS H1
FROM (
    SELECT DISINCT 
        MSGHSTID, 
        TRIM(SEQUENCE) SEQUENCE, 
        TRIM(PAYREFQUAL) PAYREFQUAL, 
        TRIM(PAYREFID) PAYREFID, 
        TRIM(TRNPRCST) TRNPRCST
    FROM XXXXX 
    WHERE ID = 7146 
) t
GROUP BY MSGHSTID;
...