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
.