不同行的每一列都有一条记录 SQL 报告

Posted

技术标签:

【中文标题】不同行的每一列都有一条记录 SQL 报告【英文标题】:Every column on different line with one record SQL reports 【发布时间】:2017-02-19 14:03:49 【问题描述】:

我正在尝试为特定的表 emp 生成类似这样的报告。

************************************************************
EMPLOYEE NUMBER : 1010
EMPLOYEE NAME : SARAH
JOB : DESIGNER
SALARY : 10000$

*************************************************************
EMPLOYEE NUMBER : 1011
EMPLOYEE NAME : HANNAH
JOB : DECORATOR
SALARY : 20000$
*************************************************************

但我不知道如何将每个列名放在不同的行上。

 sql > break column on empname skip page

上面的代码做了这样的事情。

 EMPNO ENAME      JOB              SAL
---------- ---------- --------- ----------
  7839 KING       PRESIDENT       5000

 EMPNO ENAME      JOB              SAL
---------- ---------- --------- ----------
  7840 QUEEN       PRESIDENT       4000

请建议它的代码是什么? TIA。

【问题讨论】:

【参考方案1】:

如果您只想在某些表示层(例如文本编辑器)中使用这种格式的数据,您可以简单地选择连接在一起的列,用换行符分隔:

DECLARE
CURSOR cur IS
    SELECT empno, ename, job, sal FROM yourTable;

    v_empno yourTable.empno%INT;
    v_ename yourTable.ename%VARCHAR2(100);
    v_job   yourTable.job%VARCHAR2(100);
    v_sal   yourTable.sal%NUMBER(10,4);
BEGIN
OPEN cur;
LOOP
    FETCH cur INTO v_empno, v_ename, v_job, v_sal
    EXIT WHEN cur%NOTFOUND;

    dbms_output.put_line('EMPLOYEE NUMBER : ' || v_empno || CHR(13) || 'EMPLOYEE NAME : '
                         || v_ename || CHR(13) || 'JOB : ' || v_job || CHR(13) || 'SALARY : ' ||
                         v_sal || '$' || CHR(13));
END LOOP;
CLOSE cur;
END;

【讨论】:

但是使用上面的 sql 语句,它并没有提供我想要的输出。它在一行中显示所有列和一条记录,然后递归地显示所有列。 @TrueDroider 您可以尝试复制该输出并粘贴到编辑器中,比如 Notepad++ 吗?如果它有效,它应该在那里显示正确的格式。如果没有,那么我们需要找到一种方法来获取 select 语句中的换行符。 SALARY : 800$ER : 7369 EMPLOYEE NAME : SMITH 查询显示类似这样的内容,即使在记事本++中也是如此 @TrueDroider 我最后一次尝试:使用光标和dbms_output.put_line()。如果这不起作用,您应该考虑将数据转储到文本编辑器中并从那里开始。

以上是关于不同行的每一列都有一条记录 SQL 报告的主要内容,如果未能解决你的问题,请参考以下文章

elementuitable索引不显示

如何为 db2 Sql 中的每一列汇总不具有空值的记录?

如何在 Access 2016 中的另一列上选择具有最大值的不同行

如何从一列的不同行中获取值以分隔列

将csv文件格式的数据传到SQL2008数据库中后,表中的每一列都带有双引号,这个双引号怎样才能去掉?

查找不同行中日期时间间隔的重叠?