2016-09-29 72 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 

,如果您有任何顧慮讓我知道。