1

次のテーブルを生成する次のクエリがあります。

  SELECT 
    memcpu.[ID]
  , memcpu.[DNS_NAME]
  , memcpu.[MEM_SIZE_MB] 
  , hdd.PATH
  , hdd.CAPACITY 
  FROM [VCenterServer].[dbo].[VPX_VM] AS memcpu
  INNER JOIN [VCenterServer].[dbo].[VPX_GUEST_DISK] AS hdd
  ON memcpu.ID = hdd.VM_ID
  GROUP BY 
    memcpu.[ID]
  , memcpu.[DNS_NAME] 
  , memcpu.[MEM_SIZE_MB]
  , hdd.PATH
  , hdd.CAPACITY
  ;

テーブル:

ID  DNS_NAME    MEM_SIZE_MB PATH    CAPACITY
27  name27      2048        C:\     42947571712
28  name28      4096        C:\     42947571712
28  name28      4096        E:\     134214578176
37  name37      6144        C:\     42947571712
38  name38      2048        C:\     42947571712
39  name39      8192        C:\     145077825536

すべて同じ PATH 変数の条件で ID に対して SUM を実行する方法を知りたいです。基本的に、各仮想マシンのストレージを合計して、メモリとプロビジョニングされたストレージの合計を確認できるようにします。

目的のテーブル (ID 28 に注意してください。C: と E: が合計されています):

問題は、CAPACITY が nvarchar(21) として定義されていることです。

ID  DNS_NAME    MEM_SIZE_MB     CAPACITY
27  name27      2048            42947571712
28  name28      4096            177162149888
37  name37      6144            42947571712
38  name38      2048            42947571712
39  name39      8192            145077825536
4

2 に答える 2

3

PATH句から フィールドとCAPACITYフィールドを削除し、GROUP BYで合計CAPACITYSELECTます。

このようなことをする必要があります:

SELECT 
  memcpu.[ID]
, memcpu.[DNS_NAME]
, memcpu.[MEM_SIZE_MB] 
, sum(convert(decimal(21, 0), hdd.CAPACITY))
FROM [VCenterServer].[dbo].[VPX_VM] AS memcpu
INNER JOIN [VCenterServer].[dbo].[VPX_GUEST_DISK] AS hdd
ON memcpu.ID = hdd.VM_ID
GROUP BY 
  memcpu.[ID]
, memcpu.[DNS_NAME] 
, memcpu.[MEM_SIZE_MB]
;
于 2013-09-20T20:37:44.867 に答える
0
SELECT 
  memcpu.[ID]
 , memcpu.[DNS_NAME]
 , memcpu.[MEM_SIZE_MB] 

 , sum(hdd.CAPACITY ) CAPACITY 
FROM [VCenterServer].[dbo].[VPX_VM] AS memcpu
INNER JOIN [VCenterServer].[dbo].[VPX_GUEST_DISK] AS hdd
ON memcpu.ID = hdd.VM_ID
GROUP BY 
 memcpu.[ID]
 , memcpu.[DNS_NAME] 
 , memcpu.[MEM_SIZE_MB] ;
于 2013-09-20T20:38:19.603 に答える