Вы можете сопоставить Y
с 1 и N
с 0, а затем суммировать значения по столбцам, и если оно складывается до 2 или более, у вас есть по крайней мере два столбца, содержащие Y
.
SQL Fiddle
Настройка схемы Oracle 11g R2 :
CREATE TABLE table_name ( A, B, C, D, E, F, G, H, I, J ) AS
SELECT 'Y', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N' FROM DUAL UNION ALL
SELECT 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N' FROM DUAL UNION ALL
SELECT 'N', 'Y', 'N', 'Y', 'N', 'N', 'N', 'N', 'N', 'N' FROM DUAL UNION ALL
SELECT 'N', 'N', 'Y', 'N', 'N', 'N', 'Y', 'N', 'Y', 'N' FROM DUAL;
Запрос 1 :
SELECT *
FROM table_name
WHERE DECODE( A, 'Y', 1, 0 )
+ DECODE( B, 'Y', 1, 0 )
+ DECODE( C, 'Y', 1, 0 )
+ DECODE( D, 'Y', 1, 0 )
+ DECODE( E, 'Y', 1, 0 )
+ DECODE( F, 'Y', 1, 0 )
+ DECODE( G, 'Y', 1, 0 )
+ DECODE( H, 'Y', 1, 0 )
+ DECODE( I, 'Y', 1, 0 )
+ DECODE( J, 'Y', 1, 0 ) >= 2
Результаты
| A | B | C | D | E | F | G | H | I | J |
|---|---|---|---|---|---|---|---|---|---|
| N | Y | N | Y | N | N | N | N | N | N |
| N | N | Y | N | N | N | Y | N | Y | N |
Вы также можете использовать CASE a WHEN 'Y' THEN 1 ELSE 0 END
вместо функции DECODE
.
Запрос 2 :
SELECT *
FROM table_name
WHERE CASE A WHEN 'Y' THEN 1 ELSE 0 END
+ CASE B WHEN 'Y' THEN 1 ELSE 0 END
+ CASE C WHEN 'Y' THEN 1 ELSE 0 END
+ CASE D WHEN 'Y' THEN 1 ELSE 0 END
+ CASE E WHEN 'Y' THEN 1 ELSE 0 END
+ CASE F WHEN 'Y' THEN 1 ELSE 0 END
+ CASE G WHEN 'Y' THEN 1 ELSE 0 END
+ CASE H WHEN 'Y' THEN 1 ELSE 0 END
+ CASE I WHEN 'Y' THEN 1 ELSE 0 END
+ CASE J WHEN 'Y' THEN 1 ELSE 0 END >= 2
Результаты :
| A | B | C | D | E | F | G | H | I | J |
|---|---|---|---|---|---|---|---|---|---|
| N | Y | N | Y | N | N | N | N | N | N |
| N | N | Y | N | N | N | Y | N | Y | N |