DB2联接来自同一表的两列

时间:2019-07-02 21:16:31

标签: sql select db2

我使用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 

0 个答案:

没有答案