2010-08-17 7 views
0

J'ai plus d'une requête SQL (25 pour être exact) et que vous souhaitez renvoyer les résultats sur une seule ligne de résultats. par exemple ...Combinant colonnes de plusieurs requêtes SQL

--get les Barcodes qui ont un enregistrement EnvPrint dans la base de données

select count(distinct jtbarcode) as CountEP 
from jobtracker with(nolock) 
where jtprocess = 'EnvPrint' and jtbarcode in(Select lookupcode from data with(nolock) where clientid = 123 and batchid = 12345 and jobid = 1 and subjobid = 1 and entrytype<>'c' and entrytype<>'m') 
GROUP BY jtBatchid 

--get les Barcodes qui ont un enregistrement VerifyEnvPrint dans la base de données

select count(distinct jtbarcode) as CountEVP 
from jobtracker with(nolock) 
where jtprocess = 'Verify-EnvPrint' and jtbarcode in(Select lookupcode from data with(nolock) where clientid = 123 and batchid = 12345 and jobid = 1 and subjobid = 1 and entrytype<>'c' and entrytype<>'m') 
GROUP BY jtBatchid 

cette produit

CountEP

comte vice-président exécutif

Est-il possible de retourner une ligne avec ces résultats que 2 colonnes distinctes?

J'ai essayé Union, mais il a fait 2 lignes et une colonne

Répondre

1

oui. Tirer parti du fait que le comte ne tient pas compte NULL

select 
    count(distinct CASE WHEN jtprocess = 'Verify-EnvPrint' THEN jtbarcode ELSE NULL END) as CountEVP , 
    count(distinct CASE WHEN jtprocess = 'EnvPrint' THEN jtbarcode ELSE NULL END) as CountEP 
from jobtracker with(nolock) 

where jtprocess IN ('Verify-EnvPrint', 'EnvPrint') 

    and jtbarcode in(Select lookupcode from data with(nolock) where clientid = 123 and batchid = 12345 and jobid = 1 and subjobid = 1 and entrytype<>'c' and entrytype<>'m') 
GROUP BY jtBatchid 

Cela fonctionne parce que vous avez des clauses très similaires où. Il signifie que vous aussi toucher uniquement la table une fois trop devrait donc être beaucoup plus rapide sur de nombreux jeux de résultats si elles sont similaires

+0

peut-être devrait alors être 1 ELSE 0 et également SUM compte pas non? Ne pas critiquer juste observer ... ferait aussi une belle requête PIVOT..et oui c'est mieux que le mien car il touche la table une seule fois +1 – SQLMenace

+0

Merci BEAUCOUP! Être un NOOB SQL est difficile, mais vous les gars, je vais améliorer ma vie! –

+0

@SQLMenace: SUM avec 1 ou 0 invalidera DISTINCT bien. Le COUNT/NULL n'est pas aussi évident mais traite avec DISTINCT. J'utiliserais normalement SUM/1/0. Je lui ai répondu similaire il y a quelques jours http://stackoverflow.com/questions/3483506 – gbn

0

Regardez dans la création de fonctions ou d'effectuer des requêtes sous dans votre instruction select.

Questions connexes