нужен простой запрос в t-sql

#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 Хахахаха это лучший комментарий, который я видел за всю неделю. Ах, красота табуляции сахара.