Ответ 1
Это должно быть:
SELECT SalesID, COUNT(*)
FROM AXDelNotesNoTracking
GROUP BY SalesID
HAVING COUNT(*) > 1
Относительно вашего первоначального запроса:
- Вы не можете сделать SELECT *, так как для этой операции требуется GROUP BY и столбцы должны либо находиться в GROUP BY, либо в совокупности (т.е. COUNT, SUM, MIN, MAX, AVG и т.д.).
- Поскольку это операция GROUP BY, предложение HAVING будет фильтровать ее вместо WHERE
Edit:
И я просто подумал об этом, если вы хотите увидеть, что элементы WHICH находятся там более одного раза (но это зависит от используемой вами базы данных):
;WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY SalesID ORDER BY SalesID) AS [Num]
FROM AXDelNotesNoTracking
)
SELECT *
FROM cte
WHERE cte.Num > 1
Конечно, это просто показывает строки, которые появились с тем же SalesID, но не показывают начальное значение SalesID, которое появилось более одного раза. Значение, если SalesID отображается 3 раза, этот запрос будет показывать экземпляры 2 и 3, но не первый экземпляр. Тем не менее, это может помочь в зависимости от того, почему вы ищете несколько значений SalesID.
Edit2:
Следующий запрос был опубликован APC ниже и лучше, чем упомянутый выше CTE, поскольку он показывает все строки, в которых SalesID появился более одного раза. Я включаю его здесь для полноты. Я просто добавил ORDER BY, чтобы сохранить значения SalesID, сгруппированные вместе. ORDER BY также может помочь в CTE выше.
SELECT *
FROM AXDelNotesNoTracking
WHERE SalesID IN
( SELECT SalesID
FROM AXDelNotesNoTracking
GROUP BY SalesID
HAVING COUNT(*) > 1
)
ORDER BY SalesID