Как запросом получить условное изображение шахматной доски?
Как составить запрос, который возвращает условное изображение шахматной доски?
В заголовках столбцов должны быть латинские буквы 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