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

Tìm các cột chỉ chứa các số không

declare @T table
(
  Col1 int,
  Col2 int,
  Col3 int,
  Col4 int
)

insert into @T values
(1,   0   , null, null),
(0,   null, 0   , 1)

select U.ColName
from
  (
    select count(nullif(Col1, 0)) as Col1,
           count(nullif(Col2, 0)) as Col2,
           count(nullif(Col3, 0)) as Col3,
           count(nullif(Col4, 0)) as Col4
    from @T
  ) as T
unpivot
  (C for ColName in (Col1, Col2, Col3, Col4)) as U
where U.C = 0

Kết quả:

ColName
----------
Col2
Col3

Ý tưởng đằng sau điều này là đếm null không và chỉ giữ những giá trị có số lượng 0 .

COUNT sẽ chỉ tính các giá trị không rỗng.
NULLIF (ColX, 0) sẽ làm cho tất cả 0 thành null .
Truy vấn bên trong trả về một hàng có bốn cột. UNPIVOT sẽ xoay vòng nó để bạn có hai cột và bốn hàng.
Cuối cùng là where U.C = 0 đảm bảo rằng bạn chỉ nhận được các cột không có giá trị nào ngoài null hoặc 0 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kiểm toán dữ liệu trong NHibernate và SqlServer

  2. LINQ-to-SQL có thể bỏ qua các cột không xác định khi chèn để sử dụng giá trị mặc định của cơ sở dữ liệu không?

  3. datetime2 so với datetimeoffset trong SQL Server:Sự khác biệt là gì?

  4. SQL, câu hỏi về tham gia

  5. Tôi có thể kết nối với Máy chủ SQL bên ngoài mạng của tôi không?