Я выполняю запрос, который получает несколько тысяч строк в качестве результата, а клиенту нужна строка, показывающая суммы сумм определенных числовых столбцов. Я достиг этого, используя группы по группам, но эта функция поддерживает до 32 столбцов, которые не входят в общие функции. Моя проблема заключается в том, что у меня есть почти 45 столбцов, которые я должен вернуть, всего лишь 10, из которых я покинул группу из-за агрегатных функций.Лучший способ получить общую итоговую строку результата запроса
Первоначальный запрос был что-то вроде этого:
select
o.Name,
ci.Id,
ci.OriginId,
ci.Varchar1,
ci.Varchar2,
ci.Varchar3,
ci.Varchar4,
ci.Varchar5,
ci.Varchar6,
ci.Varchar7,
ci.Varchar8,
ci.Varchar9,
ci.Varchar10,
ci.Varchar11,
ci.Varchar12,
ci.Varchar13,
ci.Varchar14,
ci.Varchar15,
ci.Varchar16,
ci.Varchar17,
ci.Varchar18,
ci.Varchar19,
ci.Varchar20,
sum(ci.Decimal1) as Decimal1,
sum(ci.Decimal1) as Decimal2,
sum(ci.Decimal1) as Decimal3,
sum(ci.Decimal1) as Decimal4,
sum(ci.Decimal1) as Decimal5,
sum(ci.Decimal1) as Decimal6,
sum(ci.Decimal1) as Decimal7,
sum(ci.Decimal1) as Decimal8,
sum(ci.Decimal1) as Decimal9,
sum(ci.Decimal1) as Decimal10,
ci.Date1,
ci.Date2,
ci.Date3,
ci.Date4,
ci.Date5,
ci.Date6,
ci.Date7,
ci.Date8,
ci.Date9,
ci.Date10
from
Items ci
inner join Origins o
on ci.OriginId = o.Id
group by grouping sets((
o.Name,
ci.Id,
ci.OriginId,
ci.Varchar1,
ci.Varchar2,
ci.Varchar3,
ci.Varchar4,
ci.Varchar5,
ci.Varchar6,
ci.Varchar7,
ci.Varchar8,
ci.Varchar9,
ci.Varchar10,
ci.Varchar11,
ci.Varchar12,
ci.Varchar13,
ci.Varchar14,
ci.Varchar15,
ci.Varchar16,
ci.Varchar17,
ci.Varchar18,
ci.Varchar19,
ci.Varchar20,
ci.Date1,
ci.Date2,
ci.Date3,
ci.Date4,
ci.Date5,
ci.Date6,
ci.Date7,
ci.Date8,
ci.Date9,
ci.Date10),())
Я попытался разбить запрос в два, так что количество столбцов в группе не достигает максимального доступного. Если я выполняю каждый отдельный запрос, я получаю желаемые результаты, но если я их объединяю, у меня есть ошибка (невозможно преобразовать nvarchar в числовой).
В результате было что-то вроде этого:
select
o.name
ci.Id,
ci.OriginId,
sum(ci.Decimal1) as Decimal1,
sum(ci.Decimal1) as Decimal2,
sum(ci.Decimal1) as Decimal3,
sum(ci.Decimal1) as Decimal4,
sum(ci.Decimal1) as Decimal5,
sum(ci.Decimal1) as Decimal6,
sum(ci.Decimal1) as Decimal7,
sum(ci.Decimal1) as Decimal8,
sum(ci.Decimal1) as Decimal9,
sum(ci.Decimal1) as Decimal10,
ci.Date1,
ci.Date2,
ci.Date3,
ci.Date4,
ci.Date5,
ci.Date6,
ci.Date7,
ci.Date8,
ci.Date9,
ci.Date10
from
Items ci
inner join Origins o
on ci.OriginId = o.Id
group by grouping sets((
o.Name,
ci.Id,
ci.OriginId,
ci.Date1,
ci.Date2,
ci.Date3,
ci.Date4,
ci.Date5,
ci.Date6,
ci.Date7,
ci.Date8,
ci.Date9,
ci.Date10),())
union
select
o.Name,
ci.Id,
ci.OriginId,
ci.Varchar1,
ci.Varchar2,
ci.Varchar3,
ci.Varchar4,
ci.Varchar5,
ci.Varchar6,
ci.Varchar7,
ci.Varchar8,
ci.Varchar9,
ci.Varchar10,
ci.Varchar11,
ci.Varchar12,
ci.Varchar13,
ci.Varchar14,
ci.Varchar15,
ci.Varchar16,
ci.Varchar17,
ci.Varchar18,
ci.Varchar19,
ci.Varchar20
from
Items ci
inner join Origins o
on ci.OriginId = o.Id
group by grouping sets((
o.name,
ci.Id,
ci.OriginId,
ci.Varchar1,
ci.Varchar2,
ci.Varchar3,
ci.Varchar4,
ci.Varchar5,
ci.Varchar6,
ci.Varchar7,
ci.Varchar8,
ci.Varchar9,
ci.Varchar10,
ci.Varchar11,
ci.Varchar12,
ci.Varchar13,
ci.Varchar14,
ci.Varchar15,
ci.Varchar16,
ci.Varchar17,
ci.Varchar18,
ci.Varchar19,
ci.Varchar20),())
Другой способ (если это возможно), будет падать в группу путем группирования наборов в SQL и генерации строки с C#, так как результат запроса является полученный IEnumerable, но я не знаю, доступна ли функция SUM.
Любые советы будут оценены.
Заранее благодарен.
Вы отображая тысячи строк, каждая строка имеет 45 столбцов в любом месте? –
Да, это главная проблема. Я должен отображать каждый столбец. – Rambo3
Используете ли вы цикл для отображения этих данных?Если это так, вычислите необходимые суммы внутри этого цикла и покажите их в конце. В стороне, попытка отобразить слишком много данных в веб-браузере часто заканчивается слезами, на всякий случай это то, что вы пытаетесь. –