Вы можете попробовать использовать регистр с подзапросом.
CREATE TABLE T(
name1 varchar(50),
f1 int,
f2 int,
f3 int,
f4 int,
f5 int
);
INSERT INTO T VALUES ('lol',0,1,1,0,0);
INSERT INTO T VALUES ('lol',0,1,1,0,0);
INSERT INTO T VALUES ('lol',0,1,1,0,0);
INSERT INTO T VALUES ('kek',1,1,1,1,0);
INSERT INTO T VALUES ('kek',2,1,1,0,0);
INSERT INTO T VALUES ('kek',4,1,1,0,0);
INSERT INTO T VALUES ('kek',3,1,1,0,0);
Запрос 1 :
SELECT distinct
name1,
CASE WHEN
(SELECT COUNT(DISTINCT f1) cnt
FROM T tt
WHERE t1.name1 = tt.name1) > 1 THEN '@' ELSE t1.f1::VARCHAR(50) END,
CASE WHEN
(SELECT COUNT(DISTINCT f2) cnt
FROM T tt
WHERE t1.name1 = tt.name1) > 1 THEN '@' ELSE t1.f2::VARCHAR(50) END,
CASE WHEN
(SELECT COUNT(DISTINCT f3) cnt
FROM T tt
WHERE t1.name1 = tt.name1) > 1 THEN '@' ELSE t1.f3::VARCHAR(50) END,
CASE WHEN
(SELECT COUNT(DISTINCT f4) cnt
FROM T tt
WHERE t1.name1 = tt.name1) > 1 THEN '@' ELSE t1.f4::VARCHAR(50) END,
CASE WHEN
(SELECT COUNT(DISTINCT f5) cnt
FROM T tt
WHERE t1.name1 = tt.name1) > 1 THEN '@' ELSE t1.f5::VARCHAR(50) END
FROM T t1
Результаты :
| name1 | f1 | f2 | f3 | f4 | f5 |
|-------|----|----|----|----|----|
| kek | @ | 1 | 1 | @ | 0 |
| lol | 0 | 1 | 1 | 0 | 0 |