结合两个SQL查询及其结果

时间:2020-07-01 13:24:05

标签: sql oracle

我正在使用Oracle数据库,并且使用联接编写了一个SQL查询,如下所示:

SELECT
(CT.CRDATTIM || CT.RECORDCD || CT.CRNODE) AS CALLERKEY 
FROM
   W67U999S F 
   JOIN
      W03U999S CT 
      ON F.CCRDATTIM = CT.CRDATTIM 
      AND F.CRECORDCD = CT.RECORDCD 
      AND F.CCRNODE = CT.CRNODE 
      AND F.CRECORDCD = 'T' 
      AND CT.WRKTYPE = 'CALLER' 
   JOIN
      PQCUSTSRV CDT 
      ON F.CCRDATTIM = CDT.CRDATTIM 
      AND F.CRECORDCD = CDT.RECORDCD 
      AND F.CCRNODE = CDT.CRNODE 
WHERE
   F.PCRDATTIM = '2019-01-29-06.10.33.037940' 
   AND F.PRECORDCD = 'F' 
   AND F.PCRNODE = '01' 
   AND CT.CRDATTIM < '9999-12-31-23.59.59.999999'

以上查询返回了以下几行数据:

CALLERKEY
----------
2019-01-29-06.10.33.310940T01
2019-03-26-00.51.05.124040T01
2019-03-26-00.51.07.993040T01
2019-03-26-00.51.35.531040T01
2019-04-02-04.02.42.280040T01

现在,我想使用以下SQL查询来查询每一行,以获取我感兴趣的一些其他数据: 示例如下:

SELECT COUNT(*) AS TESTCOUNT FROM PQCUSTSRV where CALLERKEY='2019-01-29-06.10.33.310940T01' AND TO_TIMESTAMP(CRDATTIM,'YYYY-MM-DD HH24.MI.SS.FF') 
      BETWEEN ADD_MONTHS(SYSTIMESTAMP,-12) AND SYSTIMESTAMP  
  

上面的查询返回以下数据:

TESTCOUNT
------------
2

现在,我想结合以上两个查询,并获得如下所示的输出:

CALLERKEY                           TESTCOUNT                                               
----------                          --------    
2019-01-29-06.10.33.310940T01       2
2019-03-26-00.51.05.124040T01       3       
2019-03-26-00.51.07.993040T01       2
2019-03-26-00.51.35.531040T01       1
2019-04-02-04.02.42.280040T01       4

我该如何实现?请让我知道是否需要其他信息。

3 个答案:

答案 0 :(得分:1)

with t as (
      <first query here>
     )
select t.callerkey, count(p.callerkey) AS TESTCOUNT
from t left join
     PQCUSTSRV p
     on p.callerkey = t.callerkey and
        to_timestamp(p.CRDATTIM, 'YYYY-MM-DD HH24.MI.SS.FF') >= add_months(SYSTIMESTAMP, -12) 
group by t.callerkey;

我将日期比较的逻辑更改为仅使用>=,假设您在crdattim中没有将来的值。

答案 1 :(得分:1)

您可以按以下方式使用group by

Select F.CALLERKEY, COUNT(1) AS CNT
  From (your_first_query) f
  Left Join PQCUSTSRV s
    On s.CALLERKEY=f.CALLERKEY AND TO_TIMESTAMP(CRDATTIM,'YYYY-MM-DD HH24.MI.SS.FF') 
      BETWEEN ADD_MONTHS(SYSTIMESTAMP,-12) AND SYSTIMESTAMP  
 Group by f.callerkey

答案 2 :(得分:0)

未经测试,但这应该可以工作

SELECT A.CALLERKEY, COUNT(*) AS TESTCOUNT 
(SELECT (CT.CRDATTIM || CT.RECORDCD || CT.CRNODE) AS CALLERKEY
   FROM W67U999S F
        JOIN W03U999S CT
           ON     F.CCRDATTIM = CT.CRDATTIM
              AND F.CRECORDCD = CT.RECORDCD
              AND F.CCRNODE = CT.CRNODE
              AND F.CRECORDCD = 'T'
              AND CT.WRKTYPE = 'CALLER'
        JOIN PQCUSTSRV CDT
           ON     F.CCRDATTIM = CDT.CRDATTIM
              AND F.CRECORDCD = CDT.RECORDCD
              AND F.CCRNODE = CDT.CRNODE
  WHERE     F.PCRDATTIM = '2019-01-29-06.10.33.037940'
        AND F.PRECORDCD = 'F'
        AND F.PCRNODE = '01'
        AND CT.CRDATTIM < '9999-12-31-23.59.59.999999')A, PQCUSTSRV B
 WHERE A.CALLERKEY=B.CALLERKEY AND TO_TIMESTAMP(CRDATTIM,'YYYY-MM-DD HH24.MI.SS.FF')
      BETWEEN ADD_MONTHS(SYSTIMESTAMP,-12) AND SYSTIMESTAMP
 GROUP BY B.CALLERKEY
相关问题