#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. И так далее для других строк.
Есть ли способ добиться этого?
Действительно ценится.
Спасибо