我使用TSM,它使用DB2作为其后端DB。我正在尝试将同一表中两列的数据合并到一个报表中。问题是普通服务器在NODE_NAME列下列出,但是VM的文件空间在FILESPACE_NAME列中列出,这是由于TSM将它们备份在PROXY node_name下。该表称为OCCUPANCY。我想将节点合并到一个列表中,这样我就可以生成一个报告,显示每个服务器以及虚拟机的REPORTING_MB和NUM_FILES的总和。
普通服务器:
NODE_NAME: ABC123SRV.ALT01.ULX.DC01.AS202020.NET
TYPE: Bkup
FILESPACE_NAME: /temp
STGPOOL_NAME: DEC1-CNTR-DISK
NUM_FILES: 2
PHYSICAL_MB:
LOGICAL_MB:
REPORTING_MB: 5975.37
FILESPACE_ID: 9
VM服务器:
NODE_NAME: BAASPXY01_ALT01_POD18_DED_DC01
TYPE: Bkup
FILESPACE_NAME: \VMFULL-vrpbyntdv01.ATL01.ULX.DEC1.AS202020.net
STGPOOL_NAME: DEC1-CNTR-DISK
NUM_FILES: 6075
PHYSICAL_MB:
LOGICAL_MB:
REPORTING_MB: 76494.15
FILESPACE_ID: 59
TSM有一个名为OCCUPANCY的表。该表存储了已使用的存储空间和文件总数。除非是虚拟机,否则服务器名称为NODENAME。在TSM VM的代理和VM服务器名称下的备份中,文件空间名称使用该名称。我需要构建一个显示NODE_NAME的报告,除非FILESPACE_NAME以'\ VMFULL-'开头,如果是这样,则将FILESPACE NAME用于NODENAME。请参阅上面的示例数据。目前,我必须运行两个选择并合并数据:
SELECT NODE_NAME, SUM(REPORTING_MB) AS TOTAL_MB, SUM(NUM_FILES) as NUM_FILES FROM OCCUPANCY WHERE FILESPACE_NAME NOT LIKE '\VMFULL-%' and NODE_NAME<>'' GROUP BY NODE_NAME
SELECT VARCHAR(LTRIM(FILESPACE_NAME, '\VMFULL-'),45) AS NODE_NAME, SUM(REPORTING_MB) AS TOTAL_MB, SUM(NUM_FILES) as NUM_FILES FROM OCCUPANCY WHERE FILESPACE_NAME LIKE '\VMFULL-%' GROUP BY VARCHAR(LTRIM(FILESPACE_NAME, '\VMFULL-'),45)
我需要输出如下所示
NODE_NAME REPORTING_MB NUM_FILES
-------------------- --------------- ---------
ABC123SRV... 5975.37 2
\VMFULL-vrpbyntdv01 76494.15 6075
这是我的示例选择,但是绝对没有错,因为我没有输出。 我尝试使用UNION,但是语法关闭。我从TSM收到失败消息,但没有相应的DB2错误信息
select
( select node_name
from occupancy
where filespace_name not like '\VMFULL-%'
union
select varchar(ltrim(filespace_name, '\VMFULL-'),45)
from occupancy
where filespace_name like '\VMFULL-%'
) as NODE,
sum(NUM_FILES),
sum(REPORTING_MB)
from occupancy group by NODE
更新! -通过以下选择,我得到了所需的东西
select
case
when filespace_name like '\VMFULL-%' then VARCHAR ( LTRIM ( FILESPACE_NAME , '\VMFULL-' ) , 45 )
else
varchar(node_name,45)
end as NODE,
case
when filespace_name like '\VMFULL%' then 'VM NODE'
when filespace_name not like '\VMFULL%' then 'STANDARD NODE'
end as TYPE,
sum(REPORTING_MB) as OCCUPANCY_MB,
sum(NUM_FILES) as FILES_STORED
from occupancy
where node_name not like ''
group by
case
when filespace_name like '\VMFULL-%' then VARCHAR ( LTRIM ( FILESPACE_NAME , '\VMFULL-' ) , 45 )
else
varchar(node_name,45)
end,
case
when filespace_name like '\VMFULL%' then 'VM NODE'
when filespace_name not like '\VMFULL%' then 'STANDARD NODE'
end
order by
case
when filespace_name like '\VMFULL%' then 'VM NODE'
when filespace_name not like '\VMFULL%' then 'STANDARD NODE'
end,
case
when filespace_name like '\VMFULL-%' then VARCHAR ( LTRIM ( FILESPACE_NAME , '\VMFULL-' ) , 45 )
else
varchar(node_name,45)
end
我的输出看起来像
NODE TYPE OCCUPANCY_MB FILES_STORED
----------------------------------------- -------------- ------------- ------------
AD00016.CLT01.ULX.DEC1.AS20202.NET STANDARD NODE 441826.19 1349986
AD00016.CLT01.ULX.DEC1.AS20202.NET.ORA STANDARD NODE 16340412.62 7867
AD00017.CLT01.ULX.DEC1.AS20202.NET STANDARD NODE 180552.68 707007
AD00018.CLT01.ULX.DEC1.AS20202.NET STANDARD NODE 219403.94 654237
AD00018.CLT01.ULX.DEC1.AS20202.NET.ORA STANDARD NODE 115748054.75 18552
AD00019.CLT01.ULX.DEC1.AS20202.NET STANDARD NODE 173635.86 610256
VRPBYINTAP03.CLT01.ULX.DEC1.AS20202.NET STANDARD NODE 7642.26 268377
AD00089.CLT01.ULX.DEC1.AS20202.net VM NODE 731814.73 19968
APKM001.CLT01.W.DEC1.AS20202.net VM NODE 1039912.97 72391
APKM002.CLT01.W.DEC1.AS20202.net VM NODE 280862.52 18698
APKM003.CLT01.W.DEC1.AS20202.net VM NODE 349148.95 28577
APKM004.CLT01.W.DEC1.AS20202.net VM NODE 254383.10 29564