Вы можете сделать что-то вроде этого:
select id, jsonb_object_agg(att, value)
from (
select id,
attributename as att,
case
when count(*) > 1 then
jsonb_agg(coalesce(stringvalue,intvalue::text,booleanvalue::text))
else
to_jsonb(min(coalesce(stringvalue,intvalue::text,booleanvalue::text)))
end as value
from eav
group by id, attributename
) t
group by id;
Внутренний выбор объединяет несколько значений в массив JSON, отдельные значения в скалярные значения JSON. И тогда внешний запрос строит единственное значение JSON из всех строк.
Онлайн пример: https://rextester.com/TLCRN79815
По данным группы продукта Microsoft, пересекая визуальное дерево для нахождения ScrollViewer рекомендуемый метод, как объяснено в их ответе на Codeplex.
У нас была эта та же проблема при использовании сетки Infragistics, потому что она не сделала (все еще не делает), поддерживают замороженные столбцы. Таким образом, у нас было две сетки бок о бок, которые были сделаны посмотреть как один. Сетка слева не прокручивала горизонтально, но сетка справа сделала. Замороженные столбцы бедного человека.
Так или иначе мы закончили тем просто, что достигли визуального дерева и вышли ScrollViewer
самостоятельно. Afterall, мы знали, что это было там - это просто не было выставлено объектной моделью. Вы могли использовать аналогичный подход, если сетка WPF не подвергает ScrollViewer. Или Вы могли разделить сетку на подклассы и добавить функциональность, которой Вы требуете для создания этой работы.
Заинтересованный слушанием, почему необходимо сделать это.