Pivoter таблица in SP Скл Сервер

У меня есть случай, где у меня есть, что pivotear таблица temp, который я использую в SP, эта таблица должна иметь формат Числом Месяца, пример:

introducir la descripción de la imagen aquí

introducir la descripción de la imagen aquí

Мой sp выполняет следующее: но чтобы добиваться предыдущего, - необходим центр, но искренне я попробовал делать это, но не достиг успеха

SELECT IdFactura,SUM(total) as Total,datepart(day, datediff(day, 0, Fecha)/7 * 7)/7 + 1 as NumerWeek, Nombre from #Docs as pvt
GROUP BY IdFactura,Fecha,Nombre

PIVOT (SUM(pvt.total) FOR pvt.NumerWeek IN ([1],[2],[3],[4],[5],[6])) AS Child
ORDER BY IdFactura

DROP TABLE #Docs

END

я надеюсь, что он может помогать мне, чтобы мочь реализовывать эту, вступаю в брак.

1
задан 17.04.2016, 22:47
4 ответа

RafiГ±a этот код ты puedde помогать

select 
    nombre,
    [1] AS 'Semana_1',
    [2] AS 'Semana_2',
    [3] AS 'Semana_3',
    [4] AS 'Semana_4',
    [5] AS 'Semana_5'
from(
    select nombre,NumerWeek,total
    from temp
) as source
pivot
(
    sum(total)
    for NumerWeek in (  
                        [1],
                        [2],
                        [3],
                        [4],
                        [5]
                    )
) as pvt
1
ответ дан 24.11.2019, 14:34

Честная с субконсультацией и эта делает ЦЕНТР

Select IdFactura, Total,NumerWeek,Nombre  from (
SELECT IdFactura,SUM(total) as Total,datepart(day, datediff(day, 0, Fecha)/7 * 7)/7 + 1 as NumerWeek, Nombre from #Docs as pvt
GROUP BY IdFactura,Fecha,Nombre ) Tpivot PIVOT (SUM(pvt.total) FOR pvt.NumerWeek IN ([1],[2],[3],[4],[5],[6])) AS Child
ORDER BY IdFactura
0
ответ дан 24.11.2019, 14:34

Лучшее для этого случая состоит в том, чтобы осуществлять динамический шарнир таким образом:

declare @attr varchar(max)declare @sql varchar(max)set @attr=''
set @sql='
 select 
        Nombre as NombreCliente,
        #attr#
 from 
     ( 
      SELECT
              idfactura, Total, NumerWeek, Nombre
        FROM docs
      ) as source pivot (
            max(Total)
      for NumerWeek in (
                     #attr#
                    )

     ) as pvt
     ' 
select @attr=@attr+'['+cast(v.NumerWeek as varchar)+'],'from (    
    select distinct NumerWeek FROM docs
) as v

set @attr=SUBSTRING(@attr,0,len(@attr))
set @sql=REPLACE(@sql,'#attr#',@attr)
print @sql
exec(@sql)

В этой консультации сначала определяется структура шарнира и позже вводятся dinamicamente колонны, соответствующие каждой неделе с Вашей стоимостью таким образом:

introducir la descripción de la imagen aquí

0
ответ дан 24.11.2019, 14:34

То, что ты должен делать первым, состоит в том, чтобы устанавливать колонны dinámicamente, в твоем случае он был бы числом недель:

declare @columnas varchar(max)

select @columnas =  coalesce(@columnas + '[' + cast(NumeroSemana as varchar(12)) + '],', '')
FROM (select distinct NumeroSemana from TablaParaPivot) as DTM
set @columnas = left(@columnas,LEN(@columnas)-1)

Как только у тебя есть число колонн, pivotas таблица:

DECLARE @SQLString NVARCHAR(max)

set @SQLString = 'SELECT * FROM (SELECT NumeroSemana, Total, Nombre as NombreCliente  FROM TablaParaPivot) AS SourceTable
PIVOT
(sum (Total) FOR NumeroSemana IN (' + @columnas + ') ) AS PivotTable'

В конце концов ты выполняешь консультацию:

EXECUTE sp_executesql @SQLString
0
ответ дан 24.11.2019, 14:34

Теги

Похожие вопросы