Nó nên là:
SELECT SalesID, COUNT(*)
FROM AXDelNotesNoTracking
GROUP BY SalesID
HAVING COUNT(*) > 1
Về truy vấn ban đầu của bạn:
- Bạn không thể làm một SELECT * kể từ khi hoạt động này đòi hỏi một GROUP BY và cột cần phải hoặc là trong GROUP BY hoặc trong hàm tổng hợp (ví dụ: COUNT, SUM, MIN, MAX, AVG, v.v.)
- Vì đây là thao tác GROUP BY, mệnh đề HAVING sẽ lọc thay vì Ở ĐÂU
Edit:
Và tôi chỉ nghĩ về điều này, nếu bạn muốn xem MÀ mục đang chờ ở đó nhiều hơn một lần (nhưng điều này phụ thuộc vào cơ sở dữ liệu bạn đang sử dụng):
;WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY SalesID ORDER BY SalesID) AS [Num]
FROM AXDelNotesNoTracking
)
SELECT *
FROM cte
WHERE cte.Num > 1
Tất nhiên, điều này chỉ hiển thị các hàng đã xuất hiện với cùng một SalesID nhưng không hiển thị giá trị SalesID ban đầu đã xuất hiện nhiều lần. Có nghĩa là, nếu một SalesID hiển thị 3 lần, truy vấn này sẽ hiển thị trường hợp 2 và 3 nhưng không hiển thị trường hợp đầu tiên. Tuy nhiên, nó có thể giúp tùy thuộc vào lý do tại sao bạn đang tìm kiếm nhiều giá trị SalesID.
Edit2:
Các truy vấn sau đây được đăng bởi APC dưới đây và là tốt hơn so với CTE tôi đề cập ở trên ở chỗ nó cho thấy tất cả các hàng trong đó một SalesID đã xuất hiện nhiều hơn một lần. Tôi bao gồm nó ở đây cho đầy đủ. Tôi chỉ thêm một ORDER BY để giữ các giá trị SalesID được nhóm lại với nhau. ORDER BY cũng có thể giúp đỡ trong CTE ở trên.
SELECT *
FROM AXDelNotesNoTracking
WHERE SalesID IN
( SELECT SalesID
FROM AXDelNotesNoTracking
GROUP BY SalesID
HAVING COUNT(*) > 1
)
ORDER BY SalesID
Nguồn
2012-03-16 12:11:58
gì nhiều SQL? MySQL? Microsoft SQL Server? Oracle? Truy cập? vv – UnhandledExcepSean