Как запросом получить условное изображение шахматной доски?

Как составить запрос, который возвращает условное изображение шахматной доски?

В заголовках столбцов должны быть латинские буквы a,b,c,d,e,f,h,g.
Каждая строка должна начинаться с цифры 1,2,3,4,5,6,7,8. Клетки белого цвета помечаются 0, клетки черного цвета 1. В запросе надо использовать MODEL.

Смог пока только такое:

select 'a' || a A, 'b' || b B, 'c' || c C, 'd' || d D, 'e' || e E, 'f' || f F, 'g' || g G, 'h' || h H
from (
select a, b, c, d, e, f, g, h 
from (select level a from dual connect by level <= 8)
cross join (select level b from dual connect by level <= 8)
cross join (select level c from dual connect by level <= 8)
cross join (select level d from dual connect by level <= 8)
cross join (select level e from dual connect by level <= 8)
cross join (select level f from dual connect by level <= 8)
cross join (select level g from dual connect by level <= 8)
cross join (select level h from dual connect by level <= 8)
)

Решение не верное, но другого пока не придумал. Каким образом можно вывести шахматную доску и заполнить ее 1 и 0?


Ответы (1 шт):

Автор решения: 0xdb

Не самый короткий, но наиболее понятный вариант запроса:

select n||'|' n, a, b, c, d, e, f, h, g from dual
model return updated rows
    dimension by (0 n)
    measures (0 a, 0 b, 0 c, 0 d, 0 e, 0 f, 0 h, 0 g)
    rules iterate (8) (
        a[iteration_number+1] = mod (iteration_number+1,2),
        b[iteration_number+1] = mod (iteration_number,  2),
        c[iteration_number+1] = mod (iteration_number+1,2),
        d[iteration_number+1] = mod (iteration_number,  2),
        e[iteration_number+1] = mod (iteration_number+1,2),
        f[iteration_number+1] = mod (iteration_number,  2),
        h[iteration_number+1] = mod (iteration_number+1,2),
        g[iteration_number+1] = mod (iteration_number,  2));

Результат:

   A B C D E F H G
------------------
1| 1 0 1 0 1 0 1 0
2| 0 1 0 1 0 1 0 1
3| 1 0 1 0 1 0 1 0
4| 0 1 0 1 0 1 0 1
5| 1 0 1 0 1 0 1 0
6| 0 1 0 1 0 1 0 1
7| 1 0 1 0 1 0 1 0
8| 0 1 0 1 0 1 0 1
→ Ссылка