2016-09-29 8 views
2

Ich habe eine Tabelle wie diese 3 Spalten transponieren. Ich habe die Gruppe wie unten abgeschlossen:SQL-Abfrage einige Spalten

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 

Es gibt nur zwei in col2 den möglichen Wert, die PRE und COM Aber was ich brauche, ist eine kleine Änderung wie folgt:

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

I glaube, PIVOT sollte dafür verwendet werden. Aber ich bin kein Experte in SQL. Könnte jemand bitte helfen?

+0

Können Sie Testdaten mit mehr Fällen bereitstellen? Können mehrere 'PRE' und 'COM' auf einer COL5 COL3 stehen? –

Antwort

2

können Sie PIVOT wie folgt verwenden (ich glaube, col2 nur zwei Werte aufweist und nicht col3):

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

Ich akzeptiere diese Antwort, wie ich diese Lösung mehr mag, obwohl Stans Lösung gut für mich ist. – 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 

Gefällt mir das?

+0

Nicht sehr informativ. Was genau funktioniert nicht? – StanislavL

+0

Entschuldigung für diesen vorherigen Kommentar. Es funktioniert perfekt. Vielen Dank Stan – Vijay

+0

@StanislavL: Ich denke, es gibt keine Notwendigkeit für "als" Schlüsselwort bei der Bereitstellung von Alias ​​zu einer Inline-Ansicht. – hemalp108

0

Mit 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 

, wenn Sie irgendwelche Bedenken haben lassen Sie mich wissen.

Verwandte Themen