У меня есть CTE, что дает мне результат из 760 строк. И у меня есть еще один оператор SELECT
, который дает мне 722 строки. Я хочу посмотреть, какие записи существуют в CTE, которых нет в инструкции SELECT
. Я использую оператор NOT EXISTS
, но по какой-то причине он не дает мне никакого результата. Я также пробовал NOT IN
- но то же самое ... нет записей.Как найти строки, которые не разделены между двумя запросами из одной исходной таблицы
;WITH Cte_Policies AS
(
SELECT
PolicyNumber,
ControlNo,
EffectiveDate,
ExpirationDate,
ProducerName,
SUM(BOUND_Premium) as NetWrittenPremium
FROM CatalyticWindEQ
WHERE EffectiveDate >= '05-01-2016' AND EffectiveDate <= EOMONTH(GETDATE())
AND LineName = 'Earthquake' AND Underwriter <> 'Batcheller, Jerry' AND PolicyNumber IS NOT NULL
GROUP BY
ProducerName,
EffectiveDate
,ExpirationDate ,PolicyNumber, ControlNo
)
SELECT PolicyNumber,
ControlNo,
YEAR(EffectiveDate) as PolicyEffectiveYear,
MONTH(EffectiveDate) as PolicyEffectiveMonth,
NetWrittenPremium,
ProducerName as Producer
FROM
Cte_Policies
where
NOT EXISTS
(
SELECT
PolicyNumber
FROM CatalyticWindEQ eq
WHERE EffectiveDate>='05-01-2016' AND EffectiveDate <= EOMONTH(GETDATE()) AND LineName = 'Earthquake' AND Underwriter <> 'Batcheller, Jerry'
AND PolicyNumber IS NOT NULL
and eq.PolicyNumber=Cte_Policies.PolicyNumber
GROUP BY PolicyNumber
)
Результат от КТРА только 760 строк выглядит следующим образом:
И результат от ЗЕЬЕСТА, что дает 722 строк выглядит следующим образом:
Я сделал это »
; with CTE as
(
SELECT
PolicyNumber,
ControlNo,
EffectiveDate,
ExpirationDate,
ProducerName,
SUM(BOUND_Premium) as NetWrittenPremium
FROM CatalyticWindEQ
WHERE EffectiveDate >= '05-01-2016' AND EffectiveDate <= EOMONTH(GETDATE())
AND LineName = 'Earthquake' AND Underwriter <> 'Batcheller, Jerry' AND PolicyNumber IS NOT NULL
GROUP BY
ProducerName,
EffectiveDate
,ExpirationDate ,PolicyNumber, ControlNo
)
SELECT PolicyNumber,
min(tag) as min_tag,
max(tag) as max_tag
FROM
(
SELECT PolicyNumber, 1 as tag FROM CTE
UNION ALL
SELECT PolicyNumber, 2 as tag FROM CatalyticWindEQ
) U
GROUP BY PolicyNumber
HAVING COUNT(*)=1
И теперь у меня есть 888 строк с min_tag = 2 и max_tag = 2. Означает ли это, что каждый номер политики дублируется в моей исходной таблице?
не слишком хорошо знакомы с TSQL, но мог его быть GROUP BY в вашем предложении NOT EXISTS? Не похоже, что вы используете какую-либо агрегированную функцию, чтобы GROUP BY ничего не делал. – James
Просто прокомментировал это и попытался снова, но проблема остается. Спасибо, хотя – Oleg
['EXCEPT'] (https://msdn.microsoft.com/en-us/library/ms188055.aspx)? – HABO