2017-09-08 80 views
-1

好的,我需要一些帮助。我有以下两个查询:SQL总结和两个查询减去问题

SELECT DA.OWNG_OCD AS OFFICE, 'FL' AS STATE, SUM(S.STK_END_SEQ_NUM - 
S.STK_STRT_SEQ_NUM) + COUNT(*) AS TOTSTK FROM STKRNG S, DFACCT DA, CMPNT C 
WHERE RANGE_USED_SW = 'N' AND S.DFTACCT_CANUM = DA.DFTACCT_CANUM 
AND DA.OWNG_OCD = C.OCD AND C.ST = 'FL' AND S.STK_TYP = 'R' GROUP 
BY DA.OWNG_OCD; 

SELECT C.OCD, COUNT(*) AS USED FROM DRAFT D 
JOIN STKRNG S ON S.DFTACCT_CANUM = D.DFTACCT_CANUM 
JOIN DFACCT DA ON S.DFTACCT_CANUM = DA.DFTACCT_CANUM 
JOIN CMPNT C ON CMPNT.OCD = DA.OWNG_OCD 
WHERE D.DRFT_SEQ_NUM >= (SELECT MIN(S.STK_STRT_SEQ_NUM) FROM STKRNG S 
WHERE D.DFTACCT_CANUM = S.DFTACCT_CANUM AND S.RANGE_USED_SW = 'N') 
AND D.DRFT_SEQ_NUM <= (SELECT MAX(S.STK_END_SEQ_NUM) FROM STKRNG S WHERE 
D.DFTACCT_CANUM = S.DFTACCT_CANUM AND S.RANGE_USED_SW = 'N') 
AND S.STK_TYP = 'R' 
AND S.RANGE_USED_SW = 'N' 
AND C.ST = 'FL' 
GROUP BY C.OCD; 

我想写一个查询,其中COUNT的第二个查询结果从计数结果在第一减去查询。任何想法如何做到这一点?

回答

0

把你的查询中,从您的最终查询的WHERE子句:

select q1.totstk - q2.used 
from (<your first query here>) q1 
join (<your second query here>) q2 on q2.ocd = q1.office; 
0

尝试这样:

with STKRNGMINMAX as (
SELECT S.DFTACCT_CANUM, 
MIN(S.STK_STRT_SEQ_NUM) MINNUM, MAX(S.STK_END_SEQ_NUM) MAXNUM, 
SUM(S.STK_END_SEQ_NUM - S.STK_STRT_SEQ_NUM) DIFFNUM 
FROM STKRNG S 
WHERE (S.RANGE_USED_SW, S.STK_TYP)=('N', 'R') 
group by S.DFTACCT_CANUM 
) 
SELECT C.OCD, S.DIFFNUM - COUNT(*) AS TOTSTK, 
FROM DRAFT D 
INNER JOIN STKRNGMINMAX S ON S.DFTACCT_CANUM = D.DFTACCT_CANUM and D.DRFT_SEQ_NUM between S.MINNUM AND S.MAXNUM 
INNER JOIN DFACCT DA ON S.DFTACCT_CANUM = DA.DFTACCT_CANUM 
INNER JOIN CMPNT C ON C.OCD = DA.OWNG_OCD and C.ST='FL' 
GROUP BY C.OCD;