2017-09-08 2 views
-1

OK, j'ai besoin d'aide. Je les deux requêtes suivantes:SQL somme et soustraire problème avec deux requêtes

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; 

ET

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; 

Je suis en train d'écrire une requête où les résultats du comptage dans la deuxième requête sont soustraites des résultats du comptage dans le premier question. Une idée sur la façon de faire cela?

Répondre

0

Mettez vos requêtes dans la clause de votre requête finale:

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

essayer quelque chose comme ceci:

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;