Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将两列合并为一列并忽略空值-Oracle SQL developer_Sql_Oracle_Join_Concatenation_Trim - Fatal编程技术网

如何将两列合并为一列并忽略空值-Oracle SQL developer

如何将两列合并为一列并忽略空值-Oracle SQL developer,sql,oracle,join,concatenation,trim,Sql,Oracle,Join,Concatenation,Trim,我使用的是Oracle SQL Developer,我有以下选择: SELECT a1.numero_brevetto, a1.titolo, a2.descrizione, a1.data_scadenza_brevetto, listagg(a3.organizzazione, ', ') within group (order by a3.organizzazione) organizzazione_1,

我使用的是Oracle SQL Developer,我有以下选择:

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
输出为:

NUMERO_BREVETTO        TITOLO                        DESCRIZIONE                   DATA_SCAD       ORGANIZZAZIONE_1                       ORGANIZZAZIONE_2                                                                                                                                                                                         
---------------------- ----------------------------- ----------------------------- --------------- -------------------------------------- --------------------------------------------
BREVETTO10000          asdsad                        Brevetto italiano             18-FEB-39       (null)                                 BAYER S.P.A.
从前面的选择开始,我想将Organizazione_1列的值与Organizazione_2的值连接起来。我希望获得以下输出:

NUMERO_BREVETTO        TITOLO                        DESCRIZIONE                   DATA_SCAD       ORGANIZZAZIONE_1_ORGANIZZAZIONE_2                                                                                                                                                                                                               
---------------------- ----------------------------- ----------------------------- --------------- -------------------------------------- --------------------------------------------
BREVETTO10000          asdsad                        Brevetto italiano             18-FEB-39       BAYER S.P.A.
我尝试使用CONCAT函数:

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
但我有这个输出:

NUMERO_BREVETTO        TITOLO                        DESCRIZIONE                   DATA_SCAD       ORGANIZZAZIONE_1_ORGANIZZAZIONE_2                                                                                                                                                                                                               
---------------------- ----------------------------- ----------------------------- --------------- -------------------------------------- --------------------------------------------
BREVETTO10000          asdsad                        Brevetto italiano             18-FEB-39       , BAYER S.P.A.
当ORGANIZZAZIONE_1列的值为空时,我想找到一种方法来删除“BAYER S.p.a.”附近多余的逗号(在本例中是如何删除的)。此外,如果列_organizazione_1没有空值,列Organizazione_1的所有值都为空值,我也会删除额外的逗号,例如:

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

我想要:

NUMERO_BREVETTO        TITOLO                        DESCRIZIONE                   DATA_SCAD       ORGANIZZAZIONE_1_ORGANIZZAZIONE_2                                                                                                                                                                                                               
---------------------- ----------------------------- ----------------------------- --------------- -------------------------------------- --------------------------------------------
BREVETTO10000          asdsad                        Brevetto italiano             18-FEB-39       PFIZER S.P.A.
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.
最后,我想在两列都有值的情况下保留逗号:

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.
我想要:

NUMERO_BREVETTO        TITOLO                        DESCRIZIONE                   DATA_SCAD       ORGANIZZAZIONE_1_ORGANIZZAZIONE_2                                                                                                                                                                                                               
---------------------- ----------------------------- ----------------------------- --------------- -------------------------------------- --------------------------------------------
BREVETTO10000          asdsad                        Brevetto italiano             18-FEB-39       PFIZER S.P.A.
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.
请帮帮我
附言:对不起,我的英语有多种方法可以做到这一点:

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)
或者最简单的方法是使用
修剪
,如下所示:

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

您还可以组合两个nvl2函数,如下所示

选择a1.numero_brevetto,
a1.titolo,
a2.2.说明,
a1.1斯加登扎和布雷维托的数据,
集团内的nvl2(Listag(a3.Organizazione,,')(按a3.Organizazione排序)
,nvl2(集团内的列表(a4.ragione_sociale,,'))(按a4.ragione_sociale排序)
,listagg(a3.ORGANIZAZIONE,,')在集团内(按a3.ORGANIZAZIONE排序)
||组内的“,”| | listag(a4.ragione_sociale,,”)(按a4.ragione_sociale排序)
,listagg(a3.ORGANIZAZIONE,,')在集团内(按a3.ORGANIZAZIONE排序)
)
,listagg(a4.ragione_sociale,,')在集团内(按a4.ragione_sociale排序)
)Organizazione_1_Organizazione_2
从b_Brevet到a1
完全外部连接b_tipo_brevetto a2
关于a1.tipo_brevetto=a2.tipo_brevetto
左连接b_brevetto_titolari a3
关于a1.codice_brevetto=a3.codice_brevetto
左连接b_ditta a4
在a3上。密码=a4。密码
其中a3.corrente=1和a1.numero_brevetto='BREVETTO10000'
由a1.numero_brevetto分组,
a1.titolo,
a2.2.说明,
a1.data_scadenza_brevetto
由a1.numero_brevetto订购
;

要处理null,您需要一个函数。然后就是额外的空格和逗号。提示:
a1
a2
等都是糟糕的表别名。选择一些有意义的东西,例如
b|ditta
d
。带有|运算符的修剪函数非常有用。谢谢