У меня есть процедура хранилища для динамической группировки таблиц по месяцам по годам для каждого результата суммирования, но она не группируется должным образом, и я не могу найти, где мне нужно измениться, чтобы работать хорошо
Я уже пытаюсь повторить код в C # Entity Framework, но у меня тот же результат не работает
DECLARE @fch1 NVARCHAR(10) = '2019-01-01';
DECLARE @fch2 NVARCHAR(10) = '2019-05-31';
DECLARE @query NVARCHAR(MAX);
Declare @colc nvarchar(MAX) = STUFF((SELECT DISTINCT','+QUOTENAME(concat(year(e.FECHADOCTO),month(e.FECHADOCTO),'C'))
FROM EDocumentos e WHERE e.FECHADOCTO between @fch1 and @fch2
FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 1, '');
Declare @colv nvarchar(MAX) = STUFF((SELECT DISTINCT','+QUOTENAME(concat(year(e.FECHADOCTO),month(e.FECHADOCTO),'V'))
FROM EDocumentos e WHERE e.FECHADOCTO between @fch1 and @fch2
FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 1, '');
Declare @colf nvarchar(MAX) = STUFF((SELECT DISTINCT','+QUOTENAME(concat(year(e.FECHADOCTO),month(e.FECHADOCTO),'F'))
FROM EDocumentos e WHERE e.FECHADOCTO between @fch1 and @fch2
FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 1, '');
print @colc;
SET @query = 'SELECT MARCA, '+@colc+','+@colv+','+@colf+' from (
SELECT p.MARCA,
concat(year(e.FECHADOCTO),month(e.FECHADOCTO),''C'') as [colc],
concat(year(e.FECHADOCTO),month(e.FECHADOCTO),''V'') as [colv],
concat(year(e.FECHADOCTO),month(e.FECHADOCTO),''F'') as [colf],
sum(d.CANTIDAD) as cant,
sum(d.TOTAL-d.TDESCU) as venta,
(sum(d.TOTAL-d.TDESCU)/sum(d.COSTO*d.CANTIDAD)) as factor
from EDocumentos e left join DDocumentos d on e.CVE_DOCTO=d.CVE_DOCTO
left join Productos p on d.CVE_PRODUCTO=p.CVE_PRODUCTO
left join Vendedores v on e.CVE_VEND=v.CVE_VEND
where e.FECHADOCTO between '''+@fch1+''' and '''+@fch2+'''
and v.CLASIFICACION in (''CTRAL'',''DEPTO'',''COMPA'', ''OFICI'', ''BAZAR'', ''INSTA'')
and e.ESTADO <> ''C'' and e.TIPODOCTO = ''F''
group by p.MARCA, year(e.FECHADOCTO), month(e.FECHADOCTO)
)x
pivot (sum(cant) for [colc] in ('+@colc+')) as pc
pivot (sum(venta) for [colv] in ('+@colv+')) as pv
pivot (avg(factor) for [colf] in ('+@colf+')) as pf';
print @query;
EXECUTE (@query);
это фактический результат
фактический
это ожидаемый результат
ожидается