2016-07-07 6 views
1

i Tabelle wie diese Abfragewie kann ich meine Abfrage extrahieren durchschnittliche

name M1 m2 Tot 
    a  20 30 50 
    b  10 20 30  
    a  20 10 30 
    a  30 15 45 

Durch den Einsatz haben zu finden

SELECT name, 
    ISNULL([1],0) AS tot1, 
    ISNULL([2],0) AS tot2, 
    ISNULL([3],0) AS tot3 
FROM (SELECT ROW_NUMBER() OVER (PARTITION BY name ORDER BY name) RN, 
       name, Total 
     FROM T 
    ) S 
PIVOT (MAX(Total) FOR RN IN ([1],[2],[3])) AS PVT 

ich wie aus habe

setzen
name Tot1 Tot2 Tot3 
a  50  30 45 
b  30  0  0 

jetzt muss ich füge eine weitere Spalte hinzu, um den Durchschnitt zu finden. Also muss ich eine Ausgabe wie

name Tot1 Tot2 Tot3 **Avg** 
a  50  30 45 **42** 
b  30  0  0 **10** 

wie kann ich meine Abfrage extrahieren ..

+0

prüfen Beitrag aus - http: //stackoverflow.com/questions/16968596/how-to-pivot-and-calculating-column-average –

Antwort

2

Versuchen Sie, diese

SELECT name, 
    ISNULL([1],0) AS tot1, 
    ISNULL([2],0) AS tot2, 
    ISNULL([3],0) AS tot3, 
    (ISNULL([1],0) + ISNULL([2],0) + ISNULL([3],0))/3 AS [AVG] 
FROM (SELECT ROW_NUMBER() OVER (PARTITION BY name ORDER BY name) RN, 
       name, tot 
     FROM Example 
    ) S 
PIVOT (MAX(tot) FOR RN IN ([1],[2],[3])) AS PVT 
1

Verwenden einer Unterabfrage:

with q as (<your query here>) 
select q.*, (tot1 + tot2 + tot3)/3 
from q; 
Verwandte Themen