You can unpivot your results and then compare against 'Unknown'
. This is one way (for SQL Server 2008+):
SELECT
x.Col,
x.Value
FROM dbo.[SAMPLE] t
CROSS APPLY
(
VALUES
('COL_01', t.COL_01),
('COL_02', t.COL_02),
('COL_03', t.COL_03),
('COL_04', t.COL_04),
('COL_05', t.COL_05),
('COL_06', t.COL_06),
('COL_07', t.COL_07),
('COL_08', t.COL_08),
('COL_09', t.COL_09),
('COL_10', t.COL_10),
('COL_11', t.COL_11),
('COL_12', t.COL_12),
('COL_13', t.COL_13),
('COL_14', t.COL_14),
('COL_15', t.COL_15),
('COL_16', t.COL_16),
('COL_17', t.COL_17),
('COL_18', t.COL_18)
) x (Col, Value)
WHERE X.Value = 'Unknown';
For SQL Server 2005+, you can use the variation of the above where the VALUES ...
syntax is replaced with a series of SELECTs combined via UNION ALL
:
SELECT
x.Col,
x.Value
FROM dbo.[SAMPLE] t
CROSS APPLY
(
SELECT 'COL_01', t.COL_01 UNION ALL
SELECT 'COL_02', t.COL_02 UNION ALL
SELECT 'COL_03', t.COL_03 UNION ALL
SELECT 'COL_04', t.COL_04 UNION ALL
SELECT 'COL_05', t.COL_05 UNION ALL
SELECT 'COL_06', t.COL_06 UNION ALL
SELECT 'COL_07', t.COL_07 UNION ALL
SELECT 'COL_08', t.COL_08 UNION ALL
SELECT 'COL_09', t.COL_09 UNION ALL
SELECT 'COL_10', t.COL_10 UNION ALL
SELECT 'COL_11', t.COL_11 UNION ALL
SELECT 'COL_12', t.COL_12 UNION ALL
SELECT 'COL_13', t.COL_13 UNION ALL
SELECT 'COL_14', t.COL_14 UNION ALL
SELECT 'COL_15', t.COL_15 UNION ALL
SELECT 'COL_16', t.COL_16 UNION ALL
SELECT 'COL_17', t.COL_17 UNION ALL
SELECT 'COL_18', t.COL_18
) x (Col, Value)
WHERE X.Value = 'Unknown';
Or you can use UNPIVOT
:
SELECT *
FROM dbo.[SAMPLE] AS t
UNPIVOT(Value FOR Col IN (COL_01,COL_02,COL_03,COL_04.....COL_18)) AS x
WHERE x.Value = 'Unknown';