用于转置某些列的SQL查询

时间:2016-09-29 06:40:02

标签: sql oracle oracle11g pivot crosstab

我有一个像这样的3列表: 的 COL1,COL2,COL3

我必须对这三列进行分组并计算计数。 我完成了这个小组,如下所示:

{ name: "isactive",
  title: "IsActive",
  type:"checkbox", 
  align: "center",
  sorting: false, 
  filtering: false},

col2中只有两个可能的值是PRE和COM 但我需要的是一个小的变化,如下所示:

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

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

3 个答案:

答案 0 :(得分:2)

你可以像这样使用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'));

答案 1 :(得分:1)

select
  col5,
  col3,
  SUM(CASE WHEN col2='PRE' THEN count ELSE 0 END) as PRE,
  SUM(CASE WHEN col2='COM' THEN count ELSE 0 END) as COM
FROM (select col5,col3,col2, count(*) as count 
      from mytable group by col5,col3,col2) as sub
GROUP BY col5, col3

喜欢这个吗?

答案 2 :(得分:0)

使用Pivot:

         select col5 ,col3,[PRE],[COM]
             from
            (
             select col5,col3,col2, count(*) as count 
                  from #Mytable group by col5,col3,col2
                     )c 
            pivot
            (
            max(count)
                   FOR col2 IN ([com],[pre])
            )as p

如果您有任何疑虑,请告诉我。

相关问题