Управление глобальной временной таблицей SQL из динамической сводной таблицы

#sql #sql-server #sql-server-2008-r2

#sql #sql-сервер #sql-server-2008-r2

Вопрос:

У меня есть следующий запрос:

 if OBJECT_ID('TempDB..#t1') is not null
    drop table #t1

if OBJECT_ID('TempDB..#t2') is not null
    drop table #t2

if OBJECT_ID('TempDB..##temp') is not null
    drop table ##temp

select            
    a.AssetInspectionID, a.ProjectNo, c.SystemDescription, 
    datepart(year, a.InspectionDate) InspectYear,
    a.InspectionDate, a.AssetID, f.AssetNo, e.SurfaceCondition, 
    a.EquipmentGauging, a.Probe,
    d.CalibrationBlock, a.Couplant,
    b.AssetPartID, g.PartNo, g.PartDescription, 
    b.[0Degree], b.[90Degree], b.[180Degree], b.[270Degree]
into
    #t1
from        
    AIM_AssetInspection a
inner join 
    AIM_AssetInspectionPart b on a.AssetInspectionID = b.AssetInspectionID
inner join 
    AIM_AssetSystem c on a.SystemID = c.SystemID
inner join 
    AIM_AssetCalibrationBlock d on a.CalibrationBlockID = d.CalibrationBlockID
inner join 
    AIM_AssetSurfaceCondition e on a.SurfaceConditionID = e.SurfaceConditionID
inner join 
    AIM_Asset f on a.AssetID = f.AssetID
inner join 
    AIM_AssetPart g on b.AssetPartID = g.AssetPartID
order by    
    a.InspectionDate desc


select            
    a.AssetNo, a.InspectYear, a.InspectionDate, a.ProjectNo, 
    a.SystemDescription, a.SurfaceCondition,
    a.EquipmentGauging, a.Probe, a.CalibrationBlock, a.Couplant,
    a.PartNo, a.PartDescription, 
    a.[0Degree], a.[90Degree], a.[180Degree], a.[270Degree]
into
    #t2
from        
    #t1 a

-- pivot
declare @inspectyear as nvarchar(max), @query as nvarchar(max);

set @inspectyear = STUFF((select distinct ','   quotename(InspectYear) from #t2 c
                  for XML path(''), type).value('.','NVARCHAR(MAX)'),1,1,'')

set @query =
';with data as
(
      select      assetno, inspectyear,
                  partno, PartDescription, Position, number
      from #t2
      unpivot
      (
            number
            for Position in ([0degree], [90degree], [180degree], [270degree])
      ) unpvt
)
select * into ##temp
from data
pivot
(
      sum(number)
      for inspectyear in ('   @inspectyear   ')
) pvt
order by PartNo'

--execute(@query);
exec sp_executesql @query = @query;

select * from ##temp;
drop table ##temp;
  

Результат должен быть:

 ----------------------------------------------------------------------
assetno    partno    partdescription    Position   2009    2011   2013
----------------------------------------------------------------------
EQ001      p1        part #1            0degree    8       8      9
EQ001      p1        part #1            90degree   9       9      8
EQ001      p1        part #1            180degree  7       7      6
EQ001      p1        part #1            270degree  9       9      8
ff.
  

Поскольку временная таблица является динамической, я понятия не имею, как выполнить вычисление. Например, я хочу добавить еще один столбец в результат выше. Допустим, Calc столбец, который является вычислением из 3 столбцов 2009 , 2011 , 2013 . Результат должен быть 25. И так далее для других строк.

Есть ли способ добиться этого?

Действительно ценится.

Спасибо