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

tôi muốn lấy tất cả các cột của bảng Tài khoản với truy vấn này nhưng nó đang báo lỗi

Truy vấn của bạn có một nhóm theo mệnh đề. Nếu bạn sử dụng mệnh đề group by trong truy vấn, thì mỗi cột trong câu lệnh select phải thực hiện một trong hai điều - hoặc nó phải là một phần của nhóm theo danh sách, hoặc nó phải là một tổng hợp của một số loại (Sum , Đếm, Trung bình, Tối đa, v.v.). Nếu bạn không làm điều này, SQL không biết phải làm gì với cột. Trong trường hợp của bạn, Accounts.regno và Accounts.model được liệt kê trong lựa chọn, nhưng chúng không nằm trong nhóm theo điều khoản và chúng không phải là tổng hợp - do đó lỗi của bạn.

Giả sử hiện tại bạn có hai bản ghi tài khoản có cùng tên tài khoản và slacc, nhưng Regno (hoặc kiểu máy) khác nhau. Nhóm theo mệnh đề nói rằng chúng phải được nối vào một bản ghi để hiển thị, nhưng bạn chưa nói với SQL cách thực hiện điều đó. Không quan trọng nếu dữ liệu không như vậy, SQL sẽ tìm kiếm các lỗi có thể xảy ra trước.

Trong trường hợp này, bạn có thể chỉ muốn tất cả các chi tiết được nhóm lại. Cách đơn giản nhất là chỉ cần đảm bảo bạn thêm tất cả các cột cần thiết vào nhóm, như sau

select Accounts.name, Accounts.regno, Accounts.model, Accounts.slacc, count(servicing.dt) as total 
from Accounts 
   left outer join servicing on Accounts.slacc = servicing.slacc 
group by Accounts.slacc, Accounts.name, Accounts.regno, Accounts.model

Điều này sẽ khắc phục được lỗi, nhưng bạn không cần phải nhóm thêm và sẽ rất cồng kềnh nếu bạn có nhiều cột hơn bạn muốn từ tài khoản, vì bạn phải thêm tất cả chúng. Một cách khác để xử lý nó là sử dụng số lượng cột tối thiểu cho truy vấn nhóm, sau đó nối kết quả của nó với truy vấn chính của bạn để lấy các cột khác. Nó có thể trông giống như thế này

select Accounts.name, Accounts.regno, Accounts.model, Accounts.slacc, Totals.Total 
from Accounts
   left outer join 
     ( Select slacc, count(dt) as total
       from servicing
       group by slacc
     ) Totals on Totals.slacc = Accounts.slacc



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để chuyển đổi tiêu đề cột và giá trị của nó thành hàng trong sql?

  2. Chỉ định tên cột làm tham số trong câu lệnh SELECT?

  3. Tạo bảng nhiệt độ với dãy số

  4. java.sql.SQLException:Không tìm thấy trình điều khiển phù hợp cho jdbc:sqlserver

  5. Thực thi các câu lệnh chuẩn bị do NHibernate tạo trong SQL Server Management Studio