2016-06-15 3 views
2

Мне нужно получить информацию из двух таблиц, как показано ниже, но сдвигом, так что в настоящее время они выполняют в основном один и тот же запрос 4 раза, 2 раза для каждой смены. Для первой смены они захватывают все картонные номера, которые НЕ EQUAL для DELC, и второй запрос для всех картонов EQUAL для DELC. Проблема в том, что мы хотим отличные картонные номера, и если картон был обработан в первой смене и закончил вторую смену, даже несмотря на то, что мы делаем разницу, коробка отображается дважды, потому что она отличается только для каждого запроса.SQL Distinct Mulitple Query Combine

Есть ли способ запустить ВСЕ 4 запроса вместе и сделать отчетливым по всем данным?

1 Day old 1st shift = DELC 
select count(distinct a.Barcode) 
from [RL_Ship].[dbo].[mSCAN] as a inner join 
[RL_Ship].dbo].wmsInboundQueue] on 
a.barcode = substring(message,26,20) 
Where BagToteFlag = 'Y' and direction = 'Send' 
and timeStamp >= '2016-06-14 03:00:00' 
and timeStamp < '2016-06-14 15:00:00' 
and substring(message,64,4) = 'DELC' 
and SUBSTRING(rawdata,21,20) > '0' 

1 Day old 1st shift <> DELC 
select count(distinct a.Barcode) 
from [RL_Ship].[dbo].[mSCAN] as a inner join  
[RL_Ship].dbo].wmsInboundQueue] on 
a.barcode = substring(message,26,20) 
Where a.BagToteFlag = 'Y' and a.direction = 'Send' 
and a.timeStamp >= '2016-06-14 03:00:00' 
and a.timeStamp < '2016-06-14 15:00:00' 
and substring(message,64,4) <> 'DELC' 
and SUBSTRING(rawdata,21,20) > '0' 

1 Day old 2nd shift = DELC 
select count(distinct a.Barcode) 
from [RL_Ship].[dbo].[mSCAN] as a inner join [RL_Ship].[dbo]. 
[wmsInboundQueue] on 
a.barcode = substring(message,26,20) 
Where a.BagToteFlag = 'Y' and a.direction = 'Send' 
and a.timeStamp >= '2016-06-14 15:00:00' 
and a.timeStamp < '2016-06-15 03:00:00' 
and substring(message,64,4) = 'DELC' 
and SUBSTRING(rawdata,21,20) > '0' 

1 Day old 2nd shift <> DELC 
select count(distinct a.Barcode) 
from [RL_Ship].[dbo].[mSCAN] as a inner join [RL_Ship].[dbo]. 
[wmsInboundQueue] on 
a.barcode = substring(message,26,20) 
Where a.BagToteFlag = 'Y' and a.direction = 'Send' 
and a.timeStamp >= '2016-06-14 15:00:00' 
and a.timeStamp < '2016-06-15 03:00:00' 
and substring(message,64,4) <> 'DELC' 
and SUBSTRING(rawdata,21,20) > '0' 

ответ

1

Если я понял ваш вопрос исправить первый запрос, я бы пытался получить результат, который вы хотите что-то вроде

SELECT count(distinct barcode) FROM (
select distinct a.Barcode <rest of query> 
UNION 
select distinct a.Barcode <rest of next query> 
UNION ...) 
+0

Хотя вам не нужен внешний выбор, поскольку UNION выполняет отдельное объединение, все они сохранили бы все результаты. – xQbert

+0

Да, но это даст мне уникальный счет каждого запроса? Мне нужно получить число/количество для каждого из 4 отдельных запросов. Но, как я уже сказал, если в первом запросе есть штрих-код, я не хочу, чтобы он подсчитал второй запрос, если в этих данных отображается штрих-код. – JMills

+0

и я пробовал это, и это не сработало? – JMills

0

Если я делаю союз и взлетать количество деталей я получаю правильный номер, так как дубликаты удаляются по всем запросам, но если я делаю объединение и подсчитываю номер, он не удаляет дубликаты .......

и мне действительно нужно всего рассчитывать на запрос, поскольку они представляют собой разные сдвиги/интервалы времени.

Ответ на выполнение счета, а затем - хороший, но один я не мог получить это, чтобы работать, и 2 Я думаю, что это только даст мне счет ВСЕ?

Я попытался следующие, но он дал мне следующую ошибку:

Msg 156, Level 15, State 1, Line 36 Неправильный синтаксис около ключевого слова 'выберите'.

EDIT: Хорошо, я получил эту работу, добавив «как table1» в конце, но, как я подозревал, это только дает мне общее количество, но без дубликатов, что отлично, но мне нужно подсчет для каждого из 4-х запросов , Есть идеи по этому поводу?

select count(distinct Barcode) from 
(select distinct a.barcode 
from [RL_Ship].[dbo].[mSCAN] as a inner join [RL_Ship].[dbo]. 
[wmsInboundQueue] on 
a.barcode = substring(message,26,20) 
Where BagToteFlag = 'Y' and direction = 'Send' 
and timeStamp >= '2016-06-14 03:00:00' and timeStamp < '2016-06-14 
15:00:00' 
and substring(message,64,4) = 'DELC' 
and SUBSTRING(rawdata,21,20) > '0' 
union 
select distinct a.Barcode 
from [RL_Ship].[dbo].[mSCAN] as a inner join [RL_Ship].[dbo]. 
[wmsInboundQueue] on 
a.barcode = substring(message,26,20) 
Where a.BagToteFlag = 'Y' and a.direction = 'Send' 
and a.timeStamp >= '2016-06-14 03:00:00' 
and a.timeStamp < '2016-06-14 15:00:00' 
and substring(message,64,4) <> 'DELC' 
and SUBSTRING(rawdata,21,20) > '0' 
union 
select distinct a.Barcode 
from [RL_Ship].[dbo].[mSCAN] as a inner join [RL_Ship].[dbo]. 
[wmsInboundQueue] on 
a.barcode = substring(message,26,20) 
Where a.BagToteFlag = 'Y' and a.direction = 'Send' 
and a.timeStamp >= '2016-06-14 15:00:00' 
and a.timeStamp < '2016-06-15 03:00:00' 
and substring(message,64,4) = 'DELC' 
and SUBSTRING(rawdata,21,20) > '0' 
union 
select distinct a.Barcode 
from [RL_Ship].[dbo].[mSCAN] as a inner join [RL_Ship].[dbo]. 
[wmsInboundQueue] on 
a.barcode = substring(message,26,20) 
Where a.BagToteFlag = 'Y' and a.direction = 'Send' 
and a.timeStamp >= '2016-06-14 15:00:00' 
and a.timeStamp < '2016-06-15 03:00:00' 
and substring(message,64,4) <> 'DELC' 
and SUBSTRING(rawdata,21,20) > '0')