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 ) 
4

2 回答 2

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
于 2013-06-06T12:57:24.170 回答
0

无论是为您提供物理服务器名称的字段,将该字段添加到您的 GROUP BY 语句并将其放在首位。然后它将按服务器、月份和年份(如您目前拥有的那样)分组。我的猜测是您可能想要交换年份和月份,因为这样做比按月份和年份更有意义。

于 2013-06-04T16:49:22.700 回答