SQL 查询以转置某些列

SQL query to transpose some columns

我有一个 table 这样的 3 列: col1,col2,col3

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

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 方面的专家。有人可以帮忙吗?

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

像这样?

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

使用数据透视表:

         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

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