Вы ищете unpivot, я бы использовал UNION ALL и добавил бы grp
make для каждого флага.
SELECT t1.* FROM (
SELECT name,flag_1 flag,'Flag1' grp
FROM T
UNION ALL
SELECT name,flag_2,'Flag2' grp
FROM T
UNION ALL
SELECT name,flag_3,'Flag3' grp
FROM T
) t1
WHERE t1.grp = ? and t1.flag > 0
NOTE
?
это ваш параметр ввода, он может вместо 'Flag1'
, 'Flag2'
...
Вот пример
CREATE TABLE T(
id_val int,
name varchar(50),
flag_1 int,
flag_2 int,
flag_3 int
);
insert into t values (1 ,'USD',1,0,1);
insert into t values (2 ,'CAD',0,0,0);
insert into t values (3 ,'INR',1,1,0);
insert into t values (4 ,'JPY',0,1,1);
insert into t values (5 ,'EUR',1,1,1);
insert into t values (6 ,'AUD',1,1,0);
Запрос 1 :
SELECT t1.NAME,t1.FLAG
FROM (
SELECT name,flag_1 flag,'Flag1' grp
FROM T
UNION ALL
SELECT name,flag_2,'Flag2' grp
FROM T
UNION ALL
SELECT name,flag_3,'Flag3' grp
FROM T
) t1
WHERE t1.grp = 'Flag3' and t1.flag > 0
Результаты :
| NAME | FLAG |
|------|------|
| USD | 1 |
| JPY | 1 |
| EUR | 1 |