[英]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.