在 db2 中合并两个 select 语句的结果

Posted

技术标签:

【中文标题】在 db2 中合并两个 select 语句的结果【英文标题】:Combining results of two select statements in db2 【发布时间】:2021-09-03 16:10:30 【问题描述】:

我对 SQL 相当陌生,我正在使用 db2。我有以下两个单独的查询,它们自己返回预期结果。但是,我希望将查询 2 的总数除以查询 1 的结果。

查询 1:

select count(*) total
      from ltl400tst3.frp001
      JOIN ETLLIB.CYMD_TO_DATE
          ON fhpdat = cymd_date
      left join ltl400mod3.pup092
          on pcpro = fhpro
      left join LTL400MOD3.PUP090
          on PCNUM = PANUM and PCTID = PATID
      left join ltl400mod3.pup300 on pctid = cotid and pcnum = conum and pcline = coline and fhccd = coccd
      WHERE fhbtc in ('6A16579', '6R16579') and PASTAT != 'C' and DATE = '2021-09-01';

查询 2:

select Date, case cqtype when 'O' then 'Override' when 'S' then 'Alert' else 'Other' end record_type, count(*) total
      from LTL400MOD3.PUP301
      left join LTL400MOD3.PUP300
          on COTID = CQTID and CONUM = CQNUM and COLINE = CQLINE
      join ETLLIB.CYMD_TO_DATE
      on (CAST(CQRSSTMP AS DATE)) = DATE
      left join MASTER.ACCOUNT_HIERARCHY
          on COCCD = ACCOUNT
      where ((CQSACIID = '17') or (TOP_LEVEL_ACCOUNT = '0P16579')) and DATE = '2021-09-01'
group by date, CQTYPE;

我的第一个想法是使用 CTE,但我在格式化表达式以执行来自多个 CTE 的功能时遇到了一些困难。提前感谢您的任何建议。

【问题讨论】:

请用句点表示的表名(即tablename.Date)限定所有列,并说明如何您希望这两个查询加入。您需要对这两个总数进行计算吗? 【参考方案1】:

我确信有更好的方法来实现您想要的,但由于您没有提供示例数据、业务逻辑或预期输出,我将尝试回答您的确切问题,而不是尝试重构您的查询.

with 
 query_1 (total) as (your_query_1_select_statement)

,query_2 (record_type, total) as  (your_query_2_select_statement)


select record_type, total/(select total from query_1) as ratio
from query_2;

【讨论】:

以上是关于在 db2 中合并两个 select 语句的结果的主要内容,如果未能解决你的问题,请参考以下文章

mysql如何合并两条记录,或者将查询出来的结果相连

MySQL--多表查询

SQL 在 Select 语句中合并两列

oracle 数据库查询两个表然后把结果合并成一个表

sql 在select语句中合并两列

从两个 DB2 表 UNION ALL 中提取数据