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

Sử dụng select trong ELSE của câu lệnh CASE cho tôi ORA-00937:không phải là một hàm nhóm đơn

Thực hiện một cách tiếp cận hơi khác một chút nhưng nó có vẻ hiệu quả. Thay vì viết hoa và thực hiện đếm, chỉ cần kiểm tra xem tổng hợp có rỗng không (liên kết trả về giá trị không rỗng đầu tiên trong một chuỗi) và nếu nó thay thế thông điệp của bạn. Điều này tránh được việc phân nhóm cấp độ 2 mà tôi không tin là cần thiết.

Listagg quá tệ cũng không hỗ trợ phân biệt trong tổng thể; chúng tôi có thể tránh chế độ xem nội tuyến.

SELECT coalesce(listagg(A.osuser, ', ') within group (order by A.osuser), 
                'There are no users connected') as userList
FROM (select distinct osuser from v$session) A
WHERE A.osuser!= 'SYSTEM' and A.osuser not like 'VMCONFTEST%'

Điều này có chi phí cao ở chỗ nó cố gắng tạo danh sách người dùng mà báo cáo trường hợp của bạn có thể đang cố gắng làm ngắn mạch. Tuy nhiên, nếu không có bản ghi nào trong phiên V $ thì việc phân biệt lựa chọn sẽ diễn ra nhanh chóng.

Mặc dù thành thật mà nói, tôi không chắc tại sao chúng ta cần làm điều này. Null trong danh sách thường là một phản hồi thích hợp cho thấy không có người dùng. và giao diện người dùng sẽ xử lý null nghĩa là không có người dùng.

Thậm chí có thể nhanh hơn nếu chúng ta thêm mệnh đề where vào dạng xem nội tuyến ..

SELECT coalesce(listagg(A.osuser, ', ') within group (order by A.osuser), 
                'There are no users connected') as userList
FROM (SELECT distinct osuser 
      FROM v$session
      WHERE A.osuser!= 'SYSTEM' 
        and A.osuser not like 'VMCONFTEST%') A


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trả về kết quả truy vấn dưới dạng danh sách được phân tách bằng dấu phẩy trong Oracle

  2. dbms_metadata.get_ddl không hoạt động

  3. SQL để trả về số ngày làm việc giữa 2 ngày đã qua

  4. Chức năng tổng hợp Oracle để phân bổ số tiền

  5. ký tự cho đến nay trong sql oracle