Цитата:
Сообщение от centuriy
1) можноли реализовать данную задачку на уровне самого грида,
|
Конкретно с навороченными гридами не работал, но в общем случае кажется что вряд ли, так как задача в извлечении данных, а не в их показе.
Цитата:
Сообщение от centuriy
2) недавно читал про некие запросы которые существуют именно для этой задачки
|
Во-первых, есть такая штука, как
group by, и она вроде даже работает и в BDE, и вроде даже и для DBF. Поэтому получить предварительную группировку по оценкам можно, и собирать в строку уже придется по результирующему набору данных, число строк в котором будет равно числу учеников.
Во-вторых, чтобы получить это дело одним запросом (что теоретически можно), нужен такой матан, как иерархические запросы (
connect by и
start with) или хотя бы хотя бы
grouping rollup. Можно подыскать СУБД с поддержкой этих операторов. Но это будет только эмуляция, и по-любому придется писать многоступенчатый запрос, типа
такого:
Код:
select
case
when prior_pos is null then
substr(source, 1, pos - 1)
when prior_pos = 0 then
substr(source, pos - 1)
else
substr(source, prior_pos + 1, pos - prior_pos - 1)
end token
from
select
source,
case
when connect_by_isleaf = 1 then
instr(source, delimiter, -1)
when level > 1 then
instr(source, delimiter, 1, level - 1)
end prior_pos,
case
when connect_by_isleaf = 1 then
case
when level > 1 then
length(source) + 1
else
1
end
else
instr(source, delimiter, 1, level)
end pos
from
(trim(both delimiter from source) source from dual)
connect by
level < instr(source, delimiter, -1)
end
where
pos > 0
order by
1
А агрегация списка в строку встроенной функцией
listagg появилась только в Oracle 11g Release 2. Не знаю, насколько она является стандартом на данный момент. До этого наблюдалось, что многие фичи, предложенные и реализованные впервые в Oracle, через какое-то время становились стандартом.
Как говорится, нужно отказаться от BDE и немного подождать.