Oracle 拼接一列,多行显示

Oracle concatenate in one column, display in multiple line

我需要将几列连接成一列,我正在使用 ||要做到这一点。结果成功将所有数据显示在一列中。但是,我需要它在那一列中以多行显示。这可能吗?

这是我当前的代码:

SELECT addr1 || CASE WHEN addr2 IS NOT NULL THEN ', '|| addr2 END               
             || CASE WHEN addr3 IS NOT NULL THEN ', '|| addr3 END               
             || CASE WHEN addr4 IS NOT NULL THEN ', '|| addr4 END               
             || CASE WHEN addr5 IS NOT NULL THEN ', '|| addr5 END AS Address
  FROM addressdata

这就是我希望它显示的内容:

我对 Oracle 和数据库这件事还很陌生。非常感谢您的帮助。

提前谢谢你。 :D

而不是逗号(作为分隔符),使用 newline (chr(10)) 或者 - 甚至更好 - CRLF(回车 return 换行) (chr(13) || chr(10)) 字符:

SELECT addr1 || CASE WHEN addr2 IS NOT NULL THEN CHR(13)||CHR(10) || addr2 END               
             || CASE WHEN addr3 IS NOT NULL THEN CHR(13)||CHR(10) || addr3 END               
             || CASE WHEN addr4 IS NOT NULL THEN CHR(13)||CHR(10) || addr4 END               
             || CASE WHEN addr5 IS NOT NULL THEN CHR(13)||CHR(10) || addr5 END AS Address
FROM addressdata

一个选项将使用动态 SQL Select 语句来获利 LISTAGG() 函数包含 Carriage return 字符以及相似名称的列(所有这些都以 addr) 开头,例如

SET SERVEROUTPUT ON
DECLARE
  v_str    VARCHAR2(1500);
  v_table  VARCHAR2(100):='ADDRESSDATA';
BEGIN
  SELECT LISTAGG(c.column_name,'||'',''||CHR(13)||') WITHIN GROUP (ORDER BY c.column_id)
    INTO v_str
    FROM user_tab_cols c
   WHERE c.table_name = v_table   
     AND c.column_name LIKE 'ADDR%';

  EXECUTE IMMEDIATE 'SELECT '||v_str||
                     ' FROM '||v_table INTO v_str; 
                      
  DBMS_OUTPUT.PUT_LINE(v_str);     
END;
/

假设您的列在 table 中排序,如 addr1addr2addr3 等( 考虑当前ORDER BY 子句)

Demo