Не могли бы вы объяснить, что делают эти строки кода?
Таблица 1: INT, VARCHAR, FLOAT
ID Name value
---------------------------
1 a1 32116580
2 a2 50785384
3 a3 54327508
4 a4 61030844
;with coords(i,row,col,total,N) as (
select 1,1,1,N.N*(N.N+1)/2, N.N
from (select count(*) N from table1) N
union all
select i+1,
case when col+1>N then row+1 else row end,
case when col+1>N then row+1 else col+1 end,
total, N
from coords
where i<total
)
Я знаю, with
предоставляет способ написания вспомогательных операторов для использования в большем запросе, так что это похоже на объявление некоторых переменных, которые я бы использовал, но после этого я немного запутался ... И почему использование case
для получения row and col
; Также почему в этом случае их два: case when col+1>N then row+1 else
, откуда SQL знает when to do one case or the other
? ...
i row col total N
--------------------
1 1 1 10 4
2 1 2 10 4
3 1 3 10 4
4 1 4 10 4
5 2 2 10 4
6 2 3 10 4
7 2 4 10 4
8 3 3 10 4
9 3 4 10 4
10 4 4 10 4