从行到列的 SQL 结果

Posted

技术标签:

【中文标题】从行到列的 SQL 结果【英文标题】:SQL result from Rows to Column 【发布时间】:2018-05-16 02:58:00 【问题描述】:

如何在 shell 脚本中使用 sqlplus 以列形式获取 sql 结果,如下所示。请注意第一列是表头,第二列是行值(只有1行需要显示,没有其他匹配。)

STAT_DATE       20180515

SERVER_NAME   abcd3363

Hits1         112389

Hits2         659405

虽然通过选择命令很简单,但我得到如下。

STAT_DATE   SERVER_NAME     Hits1     Hits2

----------- --------------  -------- --------

20180515    abcd3363        112389   659405  

【问题讨论】:

您使用的是什么版本的 SQL? 我们使用的是 Oracle 12c 【参考方案1】:

这应该会有所帮助 -

CREATE TABLE tabl1
    (STAT_DATE varchar2(11), SERVER_NAME varchar2(14), Hits1 varchar2(8), Hits2 varchar2(8))
;

INSERT ALL 
    INTO tabl1 (STAT_DATE, SERVER_NAME, Hits1, Hits2)
         VALUES ('20180515', 'abcd3363', '112389', '659405')
SELECT * FROM dual
;

查询 -

select * from tabl1
unpivot (vals for cols in (STAT_DATE as 'STAT_DATE', SERVER_NAME AS 'SERVER_NAME', Hits1 AS 'Hits1', Hits2 AS 'Hits2'));
;

输出 -

COLS        VALS
STAT_DATE   20180515
SERVER_NAME abcd3363
Hits1       112389
Hits2       659405

【讨论】:

谢谢。是否可以不创建表并将其概括为任意数量的行。 @harshitsrivastava 如果您想将其推广到任意数量的行,那么您需要一个包含行号/标签的列。

以上是关于从行到列的 SQL 结果的主要内容,如果未能解决你的问题,请参考以下文章

如何在 sql server 2008 中编写对行到列的查询?

具有两行到列的数据透视表

行到列的总和

Oracle 行到列的转换

如何将mysql内部连接结果从行分组到列

MySQL - 行到列