I like the elegance of Giorgos Betsos answer, but it gave me a "missing right parenthesis" error(?) which is why I refactored it to make it work and more readable for me. Feel free to fiddle with my working example here or here.
create table a_table
(
id int,
col1 varchar(255),
col2 varchar(255),
col3 varchar(255),
col4 varchar(255)
);
insert into a_table values
(1,'aaa','bbb','ZZZ', 'ddd'),
(2,'aaa','XXX','ccc', 'YYY'),
(3,'UUU','bbb','VVV', 'ddd');
WITH orig_data_query AS
(
SELECT id, col1, col2, col3, col4
FROM a_table
WHERE id IN (1,2)
),
pivot_query AS
(
SELECT id, val, col
FROM orig_data_query
UNPIVOT
(
val FOR col IN (col1, col2, col3, col4)
)
)
SELECT col, MIN(VAL) AS val1, MAX(val) AS val2
FROM pivot_query
GROUP BY col
HAVING MIN(val) <> MAX(val);