简体   繁体   English

结合两个 SQL 查询及其结果

[英]Combining two SQL Queries and their results

I am using Oracle database and I have written one SQL query using joins as below:我正在使用 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'

The above query returns me the following rows of data:上面的查询返回了以下几行数据:

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

Now I want to query for each row using the following SQL query to get some additional data that I am interested in: Example as below:现在我想使用以下 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  
  

The above query returns the following data:上述查询返回以下数据:

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

Now I want to combine the above two queries and get the output as something like below:现在我想结合以上两个查询并得到 output 如下所示:

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

How can I achieve that?我怎样才能做到这一点? Please let me know if you need any additional information.如果您需要任何其他信息,请告诉我。

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;

I changed the logic of the date comparison to just use >= , assuming that you don't have future values in crdattim .我将日期比较的逻辑更改为仅使用>= ,假设您在crdattim中没有未来值。

You can use group by as follows:您可以按如下方式使用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

Not tested but this should work未经测试,但这应该可以

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM