2013-06-04 34 views
0

我想通过查看操作系统来区分虚拟物理服务器的正常运行时间。我能够取出VMWare OS的结果,但是,我想将物理服务器分组为一行。如何在查询中将行组合在一起?

这里是我到目前为止的代码:

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

你能提供一个你得到的输出和你想要的输出样本吗? –

+0

当你说*在一行*你的意思是“枢轴”他们? –

+0

假设您将所有物理服务器组成一行。 *平均正常运行时间*仍然有意义吗? *中位正常运行时间*有意义吗? –

回答

0

无论场这是给你的物理服务器的名称,该字段添加到您的GROUP BY语句,并把它放在第一。然后它将按服务器,月份和年份进行分组(按照您当前的版本)。我的猜测是你可能想要换成年份和月份,因为比月份和年份更有意义。

0

好的,谢谢所有试图帮助的人。我试着把结果前后的图像放在一起,但是因为我没有10点声望点,所以我不能。无论如何,我想我明白了。这里是:

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