Sql server SQL Server:如何从多个计数器添加多个值

Sql server SQL Server:如何从多个计数器添加多个值,sql-server,Sql Server,我有不同的计数器,分别命名为可用字节、已提交字节、已修改页面列表字节和不同的值。我想添加这些计数器中的值,所有的值都在CounterValue下 ----------------------------------------------------------------------------- Machine Name | Counter Name | Counter ID | CounterDateTime | Counter Value ------------------------

我有不同的计数器,分别命名为可用字节、已提交字节、已修改页面列表字节和不同的值。我想添加这些计数器中的值,所有的值都在CounterValue下

-----------------------------------------------------------------------------
Machine Name | Counter Name | Counter ID | CounterDateTime | Counter Value
------------------------------------------------------------------------------
Machine 1    |Available Bytes | 1        | Dec 31st        | 123
Machine 1    |Committed Bytes | 2        | Dec 31st        | 223
Machine 1    |Modified Bytes  | 3        | Dec 31st        | 345
Machine 2    |Available Bytes | 4        | Dec 31st        | 467
Machine 2    |Committed Bytes | 5        | Dec 31st        | 567
Machine 2    |Modified Bytes  | 6        | Dec 31st        | 678
Machine 3    |Available Bytes | 7        | Dec 31st        | 467
Machine 3    |Committed Bytes | 8        | Dec 31st        | 567
Machine 3    |Modified Bytes  | 9        | Dec 31st        | 678
我该怎么做呢?

例如,我想这样做:

1-[(可用字节)/(可用字节+提交字节+修改的页面列表字节)]x 100,用于每个机器名


但我也希望保留包含相同列的相同表。

您可以尝试条件聚合。编写一个大小写,仅当名称为所需名称时返回值,否则返回0。然后求和。对表达式中的所有操作数执行此操作

SELECT machine_name,
       counterdatetime,
       1
       -
       sum(CASE counter_name
             WHEN 'Available Bytes' THEN
               counter_value
             ELSE
               0
           END)
       /
       (sum(CASE counter_name
              WHEN 'Available Bytes' THEN
                counter_value
              ELSE
                0
            END)
        +
        sum(CASE counter_name
              WHEN 'Comitted Bytes' THEN
                counter_value
              ELSE
                0
            END)
        +
        sum(CASE counter_name
              WHEN 'Comitted Bytes' THEN
                counter_value
              ELSE
                0
            END)
        +
        sum(CASE counter_name
              WHEN 'Modified Bytes' THEN
                counter_value
              ELSE
                0
            END)) counter_value
       FROM elbat
       GROUP BY machine_name,
                counterdatetime;

请不要在您的问题中添加外部链接,除非它确实包含关键信息,而这些信息不能直接包含在您的问题中。情况似乎并非如此。对此表示抱歉。这在这里是一个相当新的概念谢谢你。这就是我要找的。但是,我有很多计算要做。因此,一个计算是1-[(可用字节)/(可用字节+提交字节+修改的页面列表字节)]x 100,结果存储到一个新列中。但是,我想做另一个与第一个计算无关的计算,所以我为此创建了一个sum(case)。我尝试过这样做,但它似乎是一个叠加计算,是否可以进行多个计算,将结果返回到不同的列?例如,您在上面做的案例,我做了:将(案例(计算束)作为列1,然后我想做的是做另一个求和(与第一个计算无关的计算束)如第2列所示。@123testing123:我不太明白你在问什么,但可能感觉到一种趋势……你可以用这种方式进行任何计算,只要SQL Server中有一个标量表达式,并且你使用
sum(CASE…END)
作为变量。@123testing123:当然,你也可以使用其他表达式(或甚至相同)在第二、第三、第n列中使用该格式。只需像
,sum(…)sum(…)
一样将sum(…)sum(…)添加到列表的
FROM
后面。