2010-10-24 2 views
1

J'ai deux requêtes simplesDemande différente dans la section où, comment transformer en 1 requête?

select sum(deb)-sum(cre) as result1 from CXC where id='22731999' 

select sum(deb)-sum(cre) as result2 from CXC where id='22731999' and tipo='IM' 

la différence est où, par exemple, les premiers résultats de la requête en 769686 et la seconde en 3469, ce que je dois faire, pour voir le résultat des deux requêtes dans un résultat?

result1 result2 
---------------- 
769686 3469 

J'ai essayé

select sum(C.deb)-sum(C.cre) as Result1 from CXC C where C.id='22731999' 
UNION 
select sum(X.deb)-sum(X.cre) as Result2 from CXC X where X.id='22731999' and .tipo='IM' 

mais ce n'est pas ce que je veux, car il se traduit par 2 lignes

result1 
result2 

Je dois dire que je cette requête sous un pont ODBC pour se connecter Fichiers Cobol, le pilote est trop vieux .. donc le sql est assez basique .. J'ai cette limitation :(

le nom du pilote est Relational DataBridge pour RM Cobol

Répondre

0

Essayez une auto-jointure. Ce serait quelque chose comme ceci:

select sum (C.deb) -sum (C.cre) comme Résultat1, somme (X.deb) -sum (X.cre) comme Result2
de CXC C, CXC X
où C.id = '22731999' et X.id = '22731999' et .tipo = 'IM'

+0

lorsque cette requête échoue .. mais le résultat est trop différent. –

+0

a probablement un produit cartésien. Peut-être ajouter la clé primaire à la clause where (ex: C.id = X.id) – skimobear

0

pour cette solution

SELECT max(Result1) as Result1, max(Result2) as Result2 
FROM 
    (
    SELECT 
    select sum(C.deb)-sum(C.cre) as Result1, null as Result2 
    from CXC C where C.id='22731999' 
    UNION 
    select null as Result1, sum(X.deb)-sum(X.cre) as Result2 
    from CXC X where X.id='22731999' and .tipo='IM' 
    ) x 
1

utilisation:

SELECT SUM(t.deb) - SUM(t.cre) as result1, 
     (SELECT SUM(x.deb) - SUM(x.cre) 
      FROM CXC x 
     WHERE x.id = t.id 
      AND x.tipo = 'IM') AS result2 
    FROM CXC t 
WHERE t.id = '22731999' 

...obtenir:

result1 result2 
---------------- 
769686 3469 
1

Je pense comme ça ... union met les requêtes les unes sur les autres. joint met les requêtes l'une à côté de l'autre.

Ce que je fais dans cette situation est la suivante ...

SELECT result1, result2 FROM 
    (select sum(deb)-sum(cre) as result1, id from CXC where id='22731999') query1 
JOIN 
(select sum(deb)-sum(cre) as result2, id from CXC where id='22731999' and tipo='IM') query2 
ON query1.id = query2.id 

Pour simplifier ce qui se passe ici, juste prétendre que query1 est une table, et query2 est une table

select result1, result2 
from query1 
join query2 on query1.id = query2.id 

Espoir CA aide.

Questions connexes