2016-09-29 40 views
2

我有这样3列的表格: COL1,COL2,COL3SQL查询来调换一些列

我要组这三列和计算计数。 我已经像下面完成组:

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专家。有谁可以帮忙吗?

+0

你能否提供更多案例的测试数据?在单个COL5 COL3上可以有几个'PRE'和'COM'? –

回答

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')); 
+0

我接受这个答案,因为我更喜欢这个解决方案,尽管斯坦的解决方案对我很好。 – Vijay

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 

是这样的吗?

+0

不是很丰富。什么不工作? – StanislavL

+0

对不起,以前的评论。它的工作完美。非常感谢Stan – Vijay

+0

@StanislavL:我想在为内联视图提供别名时不需要“as”关键字。 – hemalp108

0

使用透视:

  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 

,如果您有任何顾虑让我知道。