2013-06-04 4 views
0

J'essaie de distinguer le temps de fonctionnement des serveurs physiques des serveurs virtuels en regardant OS. Je suis capable de sortir le résultat du système d'exploitation VMWare, cependant, je voudrais regrouper les serveurs physiques en une seule ligne.Comment grouper des lignes ensemble dans une requête?

Voici le code que j'ai jusqu'à présent:

SELECT TOP (100) PERCENT Avg(dbo.tblserveruptime.uptime) AS Uptime, 
         Count(*)      AS Total 
FROM dbo.server 
     INNER JOIN dbo.tblserveruptime 
       ON dbo.server.name = dbo.tblserveruptime.name 
WHERE (dbo.server.status = N'production') 
     AND (dbo.server.server_env = N'prod') 
     AND (dbo.server.os_type <> N'vmware') 
GROUP BY dbo.tblserveruptime.month, 
      dbo.tblserveruptime.year 
HAVING (dbo.tblserveruptime.month = 4) 
     AND (dbo.tblserveruptime.year = 2013) 
UNION 
SELECT TOP (100) PERCENT Avg(dbo.tblserveruptime.uptime) AS Uptime, 
         Count(*)      AS Total 
FROM dbo.server 
     INNER JOIN dbo.tblserveruptime 
       ON dbo.server.name = dbo.tblserveruptime.name 
WHERE (dbo.server.status = N'production') 
     AND (dbo.server.server_env = N'prod') 
     AND (dbo.server.os_type = N'vmware') 
GROUP BY dbo.tblserveruptime.month, 
      dbo.tblserveruptime.year 
HAVING (dbo.tblserveruptime.month = 4) 
     AND (dbo.tblserveruptime.year = 2013) 
+0

Pourriez-vous fournir un échantillon de la sortie que vous obtenez et de la sortie que vous désirez? –

+0

Quand vous dites * dans une rangée * voulez-vous dire "PIVOT" eux? –

+0

Supposons que vous regroupiez tous vos serveurs physiques en une seule ligne. Est-ce que * la disponibilité moyenne * est toujours significative? Le * temps de disponibilité médian * est-il significatif? –

Répondre

0

Quel que soit le domaine qu'il vous donne le nom du serveur physique, ajoutez ce champ à votre GROUP BY et le mettre en premier. Il sera ensuite regroupé par serveur, mois et année (comme vous l'avez actuellement). Ma conjecture est que vous pourriez vouloir échanger l'année et le mois car il est plus logique de le faire de cette façon que par mois et ensuite l'année.

0

Ok, merci à tous ceux qui ont essayé d'aider. J'ai essayé de mettre des images de mes résultats avant et après, mais je n'ai pas pu car je n'ai pas 10 points de réputation. De toute façon, je pense que je l'ai eu. Le voici:

SELECT  AVG(dbo.tblServerUptime.Uptime) AS Uptime, 
CASE WHEN OS_TYPE = 'VMWare' THEN 'Virtual' ELSE 'Physical' END AS [Physical vs VM] 
FROM   dbo.Server INNER JOIN 
         dbo.tblServerUptime ON dbo.Server.NAME = dbo.tblServerUptime.NAME 
GROUP BY CASE WHEN OS_TYPE = 'VMWare' THEN 'Virtual' ELSE 'Physical' END 
Questions connexes