Объединение столбцов из нескольких запросов SQL - PullRequest
0 голосов
/ 17 августа 2010

У меня более одного SQL-запроса (25, если быть точным), и я хочу вернуть результаты в виде одной строки результатов. например ...

- Получить штрих-коды, имеющие запись EnvPrint в базе данных

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

- Получить штрих-коды, имеющие запись VerifyEnvPrint в базе данных

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

это производит

CountEP

18

Количество EVP

18

Можно ли вернуть одну строку с этими результатами в виде 2 отдельных столбцов?

Я попробовал Union, но он сделал 2 строки и один столбец

Ответы [ 2 ]

1 голос
/ 17 августа 2010

да.Используйте тот факт, что COUNT игнорирует 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

Это работает, потому что у вас есть очень похожие предложения WHERE.Это также означает, что вы дотрагиваетесь только до таблицы один раз, поэтому для многих наборов результатов должно быть намного быстрее, если они похожи

0 голосов
/ 17 августа 2010

Изучите создание функций или выполнение подзапросов в вашем операторе select.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...