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
परिणाम:
ColName
----------
Col2
Col3
इसके पीछे विचार गैर null
. को गिनना है मान और केवल उन्हीं को रखें जिनकी गिनती 0
. है ।
COUNT
केवल गैर-शून्य मानों की गणना करेगा।
NULLIF(ColX, 0)
सभी 0
बना देगा null
. में .
आंतरिक क्वेरी चार स्तंभों वाली एक पंक्ति लौटाती है। UNPIVOT
इसे घुमा देगा ताकि आपके पास दो कॉलम और चार पंक्तियाँ हों।
आखिरकार where U.C = 0
सुनिश्चित करता है कि आपको केवल वे कॉलम मिले जिनमें null
. के अलावा कोई मान नहीं है या 0
।