PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Tuesday, September 6, 2022

[FIXED] How to combine two columns into one and ignore null values - Oracle SQL developer

 September 06, 2022     concatenation, join, oracle, sql, trim     No comments   

Issue

I'm using Oracle SQL Developer and i have the following select:

SELECT a1.numero_brevetto,
         a1.titolo,
         a2.descrizione,
         a1.data_scadenza_brevetto,
         listagg(a3.organizzazione, ', ') within group (order by a3.organizzazione) organizzazione_1,
         listagg(a4.ragione_sociale, ', ' ) within group (order by a4.ragione_sociale) organizzazione_2
    FROM b_brevetto a1
         FULL OUTER JOIN b_tipo_brevetto a2
            ON a1.tipo_brevetto = a2.tipo_brevetto
         LEFT JOIN b_brevetto_titolari a3
            ON a1.codice_brevetto = a3.codice_brevetto
         LEFT JOIN b_ditta a4
            on a3.codice_ditta=a4.codice_ditta
   WHERE a3.corrente = 1 AND a1.numero_brevetto = 'BREVETTO10000'
GROUP by a1.numero_brevetto,
         a1.titolo,
         a2.descrizione,
         a1.data_scadenza_brevetto          
ORDER BY a1.numero_brevetto

The output is:

NUMERO_BREVETTO        TITOLO                        DESCRIZIONE                   DATA_SCAD       ORGANIZZAZIONE_1                       ORGANIZZAZIONE_2                                                                                                                                                                                         
---------------------- ----------------------------- ----------------------------- --------------- -------------------------------------- --------------------------------------------
BREVETTO10000          asdsad                        Brevetto italiano             18-FEB-39       (null)                                 BAYER S.P.A.

Starting from the previous select, I want to concatenate the values of the column Organizzazione_1 with the values of Organizzazione_2. i want to obtain the following output:

NUMERO_BREVETTO        TITOLO                        DESCRIZIONE                   DATA_SCAD       ORGANIZZAZIONE_1_ORGANIZZAZIONE_2                                                                                                                                                                                                               
---------------------- ----------------------------- ----------------------------- --------------- -------------------------------------- --------------------------------------------
BREVETTO10000          asdsad                        Brevetto italiano             18-FEB-39       BAYER S.P.A.

I tried with the CONCAT function:

SELECT a1.numero_brevetto,
         a1.titolo,
         a2.descrizione,
         a1.data_scadenza_brevetto,
         concat(concat(listagg(a3.organizzazione, ', ') within group (order by a3.organizzazione), ', '),
         listagg(a4.ragione_sociale, ', ' ) within group (order by a4.ragione_sociale)) titolari
    FROM b_brevetto a1
         FULL OUTER JOIN b_tipo_brevetto a2
            ON a1.tipo_brevetto = a2.tipo_brevetto
         LEFT JOIN b_brevetto_titolari a3
            ON a1.codice_brevetto = a3.codice_brevetto
         LEFT JOIN b_ditta a4
            on a3.codice_ditta=a4.codice_ditta
   WHERE a3.corrente = 1 AND a1.numero_brevetto = 'BREVETTO10000'
GROUP by a1.numero_brevetto,
         a1.titolo,
         a2.descrizione,
         a1.data_scadenza_brevetto          
ORDER BY a1.numero_brevetto

but i have this output:

NUMERO_BREVETTO        TITOLO                        DESCRIZIONE                   DATA_SCAD       ORGANIZZAZIONE_1_ORGANIZZAZIONE_2                                                                                                                                                                                                               
---------------------- ----------------------------- ----------------------------- --------------- -------------------------------------- --------------------------------------------
BREVETTO10000          asdsad                        Brevetto italiano             18-FEB-39       , BAYER S.P.A.

I wuold like to find a way to remove the extra comma near "BAYER S.P.A." when the column ORGANIZZAZIONE_1 has NULL value (how in this case). Moreover i wuold also remove the extra comma if column_ORGANIZZAZIONE_1 has had NOT NULL values and column ORGANIZZAZIONE_" all NULL VALUE, for example:

NUMERO_BREVETTO        TITOLO                        DESCRIZIONE                   DATA_SCAD       ORGANIZZAZIONE_1                       ORGANIZZAZIONE_2                                                                                                                                                                                         
---------------------- ----------------------------- ----------------------------- --------------- -------------------------------------- --------------------------------------------
BREVETTO20000          asdsad                        Brevetto italiano             18-FEB-59       PFIZER S.P.A.                         (null)

I want to have:

NUMERO_BREVETTO        TITOLO                        DESCRIZIONE                   DATA_SCAD       ORGANIZZAZIONE_1_ORGANIZZAZIONE_2                                                                                                                                                                                                               
---------------------- ----------------------------- ----------------------------- --------------- -------------------------------------- --------------------------------------------
BREVETTO10000          asdsad                        Brevetto italiano             18-FEB-39       PFIZER S.P.A.

Finally i want to mantain the comma in the case both column have values:

NUMERO_BREVETTO        TITOLO                        DESCRIZIONE                   DATA_SCAD       ORGANIZZAZIONE_1                       ORGANIZZAZIONE_2                                                                                                                                                                                         
---------------------- ----------------------------- ----------------------------- --------------- -------------------------------------- --------------------------------------------
BREVETTO10000          asdsad                        Brevetto italiano             18-FEB-39       PFIZER S.P.A.                          BAYER S.P.A., TEVA S.P.A.

I want to have:

NUMERO_BREVETTO        TITOLO                        DESCRIZIONE                   DATA_SCAD       ORGANIZZAZIONE_1_ORGANIZZAZIONE_2                                                                                                                                                                                                               
---------------------- ----------------------------- ----------------------------- --------------- -------------------------------------- --------------------------------------------
BREVETTO10000          asdsad                        Brevetto italiano             18-FEB-39       PFIZER S.P.A., BAYER S.P.A., TEVA S.P.A.

Pls help me P.S: Sorry for my english


Solution

There is multiple ways to do this:

case when listagg(a3.organizzazione, ', ') within group (order by a3.organizzazione) is not null 
     then  listagg(a3.organizzazione, ', ') within group (order by a3.organizzazione) || ',' 
end
||
listagg(a4.ragione_sociale, ', ' ) within group (order by a4.ragione_sociale)

or simplest way is to use the trim as follows:

trim(both ',' from
listagg(a3.organizzazione, ', ') within group (order by a3.organizzazione)
|| ','
|| listagg(a4.ragione_sociale, ', ' ) within group (order by a4.ragione_sociale)
)


Answered By - Popeye
Answer Checked By - Willingham (PHPFixing Volunteer)
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing