#tsql
#tsql
Вопрос:
У меня есть запрос, который я упростил для нашей цели. Как вы достигаете этого результата?
ID OrigId
----------
1 1
2 1
3 3
4 4
5 4
6 6
Result
ID OrigId
----------
1 1
2 1
4 4
5 4
Комментарии:
1. Что вы пытаетесь исключить? Вы фильтруете по ID или OrigID?
2. Я единственный, кто не следит за этим? Вы пытаетесь отфильтровать все, что не изменилось по сравнению с оригиналом? В этом случае, почему возвращается 4,4, но не 6,6?
3. @MikeChristensen — Объяснение из OP не существует, но, похоже, это строки, в которых
OrigId
появляется более одного раза, которые должны быть возвращены.4. О, теперь я понимаю — да, это похоже на забавную головоломку «найди шаблон»!
5. Проголосовал против за окончательную неопределенность doom.
Ответ №1:
Чтобы вернуть все строки, в которых соответствующее OrigId
появляется в таблице более одного раза, вы можете использовать
;WITH CTE AS
(
SELECT *,
COUNT(*) OVER (PARTITION BY OrigId) AS C
FROM YourTable
)
SELECT ID,
OrigId
FROM CTE
WHERE C >1
Ответ №2:
Вы можете использовать оператор HAVING
SELECT *
FROM dbo.Table
WHERE OrigID IN
(
SELECT OrigID
FROM dbo.Table
GROUP BY OrigID
HAVING COUNT(*) > 1
)
Ответ №3:
select *
from selecttest
where origid in
(
select origid
from selecttest
group by origid
having COUNT(*) > 1
)
Комментарии:
1. Чем это отличается от ответа @msmucker0527, опубликованного за 7 минут до этого?
2. @MartinSmith это не так. Я писал запрос до того, как увидел его сообщение. Я могу удалить, если хотите.
3. У вас лучшая вкладка в подзапросе
4. @msmucker0527 Хахахаха это лучший комментарий, который я видел за всю неделю. Ах, красота табуляции сахара.