用于转置某些列的 SQL 查询

标签 sql oracle oracle11g pivot crosstab

我有一个这样的表,有 3 列: 列1,列2,列3

我必须将这三列分组并计算计数。 我已经通过如下方式完成了小组:

select col5,col3,col2, count(*) from mytable group by col5,col3,col2

COL5    COL3    COL2    COUNT(*)
MOVIL   A       PRE     81.00
MOVIL   B       COM     466.00
MOVIL   A       COM     947.00

col2 中只有两个可能的值,即 PRE 和 COM 但我需要的是像下面这样的小改变:

COL5    COL3    PRE    COM
MOVIL   A       81     947
MOVIL   B       NULL   466

我认为 PIVOT 应该用于此目的。 但我不是 SQL 专家。有人可以帮忙吗?

最佳答案

您可以像这样使用 PIVOT (我认为 col2 只有两个值,而不是 col3):

SELECT *
FROM (select col5,col3,col2, count(*) from mytable group by col5,col3,col2)
PIVOT(MAX(CNT) FOR COL2 IN ('PRE','COM'));

关于用于转置某些列的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39763126/

相关文章:

mysql - 如何从数据库中的日期字段中提取 36 小时

sql - 给定一列的总和,对行对/三元组进行排序

sql - 如何在 Oracle SQL 数据库中查找相关行

oracle - 我有一个程序,我想比较带来日期并带来所需的数据

mysql更新列内部连接另一个表

sql - ORACLE PL/SQL 检查字符串是否为NULL

sql - 选择除 IDENTITY 列之外的所有列

sql - Oracle sql - 从文件中读取 IN 子句数据

java - Oracle Sql Developer 堆空间错误、协议(protocol)错误

database - Oracle 数据库表行数