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

Oracle SQL nhóm theo cột với số đếm nhưng chỉ khi cột là null hoặc 0

điều này sẽ làm được điều đó:

SQL> select id, other_id, date_value, value, cnt from
  2   (
  3     SELECT id, other_id, date_value, value,
  4     case
  5       when other_id is null or other_id = '0' then 1
  6       else ROW_NUMBER() OVER (partition by other_id order BY Date_Value desc)
  7     end r,
  8     case
  9       when other_id is null or other_id = '0' then 1
 10       else count(*) OVER (partition by other_id)
 11     end cnt
 12     FROM some_table
 13   )
 14  where r = 1
 15  order by id;

        ID OTH DATE_VALUE               VALUE        CNT
---------- --- ------------------- ---------- ----------
         1 abc 2011-04-20 21:03:05        104          3
         3 xyz 2011-04-20 21:03:03        130          2
         5 0   2011-04-20 21:02:08         65          1
         7     2011-04-20 21:02:07        200          1
         8 0   2011-04-20 21:02:07        201          1
         9     2011-04-20 21:02:07        202          1

6 rows selected.

SQL>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle (Cũ?) Gia nhập - Một công cụ / tập lệnh để chuyển đổi?

  2. Giới thiệu về PL / SQL Thu thập hàng loạt trong Cơ sở dữ liệu Oracle

  3. Chuyển đổi truy vấn SQL sang sử dụng toán tử bộ

  4. Lấy BLOB từ cơ sở dữ liệu, cách đặt chúng trở lại

  5. làm thế nào để thực hiện một hàm để trả về loại hàng từ một bảng trong pl / sql?