Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server 2005 lỗi khi nhóm bằng truy vấn con

Để bắt đầu, nếu chúng tôi đưa ra lỗi đầy đủ, nó sẽ có nội dung là " Mỗi biểu thức GROUP BY phải chứa ít nhất một cột không phải là tham chiếu bên ngoài. "

Để hiểu lỗi, chúng tôi cần làm rõ ý nghĩa của 'tham chiếu bên ngoài'

(Lưu ý:trong trường hợp này, nó không liên quan gì đến các phép nối bên trong hoặc bên ngoài)

Bên trong bên ngoài tham chiếu đến truy vấn chính và truy vấn phụ. Trong trường hợp này là EXISTS là truy vấn con và nó là một tương quan truy vấn con vì nó có tham chiếu bên ngoài là #header.header , tham chiếu đến bảng bên ngoài #header , trong khi bất kỳ tham chiếu nào đến #detail sẽ được coi là tài liệu tham khảo bên trong.

Về bản chất, vì CASE sử dụng truy vấn con tương quan tham chiếu đến truy vấn bên ngoài, sau đó điều này kích hoạt trạng thái lỗi, vì thông báo lỗi này xuất hiện khi bạn cố gắng chỉ sử dụng các biểu thức trong mệnh đề GROUP BY được hiểu là tham chiếu bên ngoài.

Truy vấn phụ có thể được sử dụng trong GROUP BY, nhưng không được sử dụng trong các truy vấn con tương quan.

Thật khó hiểu, cùng một lỗi có thể được tạo ra bởi một truy vấn đơn giản hơn, không được truy vấn lại, chẳng hạn như

select 
 case when header=1 then 1 
      else 0 
 end headeris1, 
 'constant' 
from #header 
group by case when header=1 then 1 else 0 end , 'constant'

hoặc thậm chí thay thế hằng số bằng @variable

Trong như bùn?

Kev



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sao chép dữ liệu vào và từ cùng một bảng và thay đổi giá trị của dữ liệu đã sao chép trong một cột thành một giá trị được chỉ định

  2. ĐẶT SỐ KHOẢN BẬT có thực sự tạo ra sự khác biệt về hiệu suất nhiều như vậy không

  3. Một số cách truy cập Microsoft SQL Server từ Linux là gì?

  4. Tìm giá trị khác 0 trước đó từ danh sách theo thứ tự ngày

  5. Entity Framework 6 GUID làm khóa chính:Không thể chèn giá trị NULL vào cột 'Id', cột 'FileStore' của bảng không cho phép giá trị rỗng