2011-05-10 30 views
5

Tôi đã hy vọng chạy một truy vấn đơn lẻ và nhận kết quả từ đó. Tuy nhiên, MSSQL phàn nàn về một lỗi cú pháp gần từ khóa GROUP. Tôi đã hy vọng làm như sau.Chọn không thành công, nhưng khi xem nó hoạt động

SELECT COUNT(*) AS cnt,Field_2 
    FROM (SELECT DISTINCT Field_1, Field_2 
      FROM Table_1) 
GROUP BY Field_2 
    HAVING COUNT(*) > 1 

Thay vào đó tôi đã phải tạo ra một cái nhìn, View_1, với truy vấn

SELECT DISTINCT Field_1, Field_2 
    FROM Table_1 

Và sau đó làm một

SELECT COUNT(*) AS cnt, Field_2 
    FROM View_1 
GROUP BY Field_2 
    HAVING COUNT(*) > 1 

Câu hỏi đặt ra là tại sao, trong tâm trí của tôi nó về cơ bản là cùng một SQL.

Lưu ý: Tên trường, bảng và tên đã được thay đổi để bảo vệ người vô tội. ;-)

Trả lời

13

SQL Server đòi hỏi bạn phải chỉ định một bí danh bảng cho một cái nhìn bảng/inline có nguồn gốc: Câu trả lời

SELECT COUNT(*) AS cnt, 
     x.Field_2 
    FROM (SELECT DISTINCT Field_1, Field_2 
      FROM Table_1) AS x 
GROUP BY x.Field_2 
    HAVING COUNT(*) > 1 
+0

Aha, một giải pháp đơn giản. Cảm ơn nhiều. –

+0

Để công bằng, SQL Server không thể đổ lỗi cho thiết kế ngôn ngữ xấu này vì nó được chỉ định trong Chuẩn SQL-92. Trong các tác phẩm của ông, [Hugh Darwen] (http://www.dcs.warwick.ac.uk/~hugh/TTM/Importance-of-Column-Names.pdf) luôn sử dụng một tên tương quan bảng pejorative (cái gì khác từ SQL -92; 'bí danh' là thông tục :) chẳng hạn như 'TEETH_GNASHER'. – onedaywhen

0

OMG Ngựa Non là chính xác 100%.

Tôi nghĩ rằng điều này sẽ hiển thị kết quả tương tự nhưng tôi không thể kiểm tra tại:

SELECT COUNT(DISTINCT Field_1) AS cnt 
    , Field_2 
FROM Table_1 
GROUP BY Field_2 
HAVING COUNT(DISTINCT Field_1) > 1 
Các vấn đề liên quan