У меня сложный t-sql-запрос «для меня в любом случае», который не работает так, как мне нужно.Запрос предназначен для возврата симулированных записей, объединенных в две базы данных, которые имеют симулированные записи в каждой базе данных.В случае сбоя продукта ему будет присвоено значение «Сбой» в одной БД или «PF» в другой БД.«PR» означает «ГОТОВ ПРОДУКТ» в обоих.Я пытаюсь вернуть список, который содержит только данные «Failed or PF», в которых <две записи основаны на столбце ProdNo.«Это должно побудить сотрудника снова протестировать продукт», если в одной из БД существует 2 записи, никаких действий не требуется. «Мой запрос прерывается, когда я пытаюсь ограничить результаты отображением только записей, которые имеют менее 2 дубликатов»Значения ProdNo ". Другими словами, продукт производится и ему присваивается номер ProdNo. После тестирования его можно пометить как PR, PF или Failed. Мой запрос никогда не должен давать никаких результатов с PR, но при выполнении тестаЧерез несколько дней после исходного теста в моих результатах появятся значения PR. </p>
Вот запрос с примечаниями.
-- 1st half of union query
-- Find all run failed's that do not have a PR'ed 2nd test.
Declare @daysback int
set @daysback = -2
select min(sid3)as 'ProdNo',
min([Timestamp])as 'TimeS',
min(Burn) as 'type',
min(Mixer) as 'Mixer'
from [Stat].[dbo].[oedata]
where sid3 IN
(
-- Find run faileds and PRs in Stat db
SELECT [sid3]
from [Stat].[dbo].[oedata]
where (type ='wos') and (burn = 'failed')
and (Flag = '128')
)
--- Limit Results to return only instances of 1 record
AND [Timestamp] > DATEADD( d, @daysback, getdate())
group by Sid3
having COUNT(Sid3) = 1
union all
-- Find PF's in CompanyMES MLab DB
select min(mProd_ProdNumber)as 'ProdNo',
min([Timestamp])as 'TimeS',
min(CheckType) as 'type',
min(Mixer) as 'Mixer'
from [CompanyMES].[dbo].[mLab]
where mProd_ProdNumber IN
(
-- Find failed DFs or scrap wos products
SELECT [mProd_ProdNumber]
from [CompanyMES].[dbo].[mLab]
where (CheckType = 'PF' )
)
-- Limit Results to instances with only 1 record
AND [Timestamp] > DATEADD( d, @daysback, getdate())
group by mProd_ProdNumber
having COUNT(mProd_ProdNumber) < 2
order by TimeS Desc
--------------------------------------------------------------------------
Пример данных и результатов:
ProdNo Type
=================
'1111' 'PF'
'1111' 'PR'
'1112' 'PR'
'1113' 'PF'
'1114' 'Failed'
ProdNo 1111 не должен ничего возвращать, поскольку у него есть 2 записи, а также существует PR.
1113 и 1114 должны возвращать результаты, поскольку у них обоих есть только 1 запись, а также PF и Failed Types