2015-07-06 2 views
0

У меня есть результирующий набор, созданный как CTE с использованием Union, который содержит повторяющиеся записи. как в изображении ниже:Удалите все дублированные записи из набора результатов (удалите оба)

enter image description here

И запрос:

WITH CTE (StartTime ,EndTime) 
AS 
(
SELECT StartTime ,EndTime, Null as Exclude, SupplierId FROM cms.TimeSlotMaster 
WHERE Monday = 1 AND SupplierID IS NULL 

UNION 

SELECT StartTime ,EndTime FROM cms.TimeSlotOverRider 
WHERE SupplierID IS NULL 
AND StartDate <= cast(GETDATE() as DATE) AND EndDate >= cast(GETDATE() as DATE) 
) 

Теперь я пытаюсь удалить повторяющиеся результаты из этого результата, установленного на всех. Поэтому, наконец, набор результатов должен быть всего 2 строки. Так оно и должно выглядеть следующим образом:

enter image description here

Любая помощь будет оценена. Благодарю.

Для получения дополнительной информации первого результирующего набора генерируется с использованием ниже КТР

+0

Дубликат http://stackoverflow.com/questions/18932/how-can-i-remove-duplicate-rows – PKirby

ответ

1

Вы можете использовать NOT EXISTS:

SELECT t.* 
FROM dbo.TableName t 
WHERE NOT EXISTS 
(
    SELECT 1 FROM dbo.TableName t2 
    WHERE t. ID <> t2.ID 
    AND t.StartTime = t2.StartTime 
    AND t.EndTime = t2.EndTime 
) 

или - если у вас нет первичного ключа в этой таблице:

WITH CTE AS 
(
    SELECT t.*, cnt = COUNT(*) OVER (PARTITION BY StartTime, EndTime) 
    FROM dbo.TableName t 
) 
SELECT StartTime, EndTime 
FROM CTE 
WHERE cnt = 1 
+0

Этот результат устанавливается с помощью union. Поэтому в результирующем наборе у меня нет первичного столбца типа Id. –

+0

Хорошо, дайте мне попробовать второй. –

+0

Спасибо, счет = 1 работал хорошо для меня :) –

Смежные вопросы