を取得し、私は次のテーブルを持っている:
最後の2年間の値と最も古い年のSQL
--------------------------------------------------------------
InspectYear Part Pos1 Pos2 Pos3 Pos4
--------------------------------------------------------------
2009 001 8 8 9 7
2009 002 9 7 8 6
2011 001 9 9 8 7
2011 002 7 8 6 8
2013 001 8 9 7 9
2013 002 7 7 8 8
2015 001 8 8 7 4
2015 002 7 6 9 8
InspectYear
データは常に、各パートごとに2年追加されます。
前年(Calc1)の各pos#
列の最新の値を計算したいとします。また、最も古い値(Calc2)を持つ最新の値。私は、次のような結果が欲しい:ピボットの事について
---------------------------------------------------------------------
Part Pos 2009 2011 2013 2015 Calc1 Calc2
---------------------------------------------------------------------
001 Pos1 8 9 8 8 0 0
001 Pos2 8 9 9 8 -1 0
001 Pos3 9 8 7 7 0 -2
001 Pos4 7 7 9 4 -5 -3
を、私は次のコードをしましたが、計算のために知っていない:
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 inspectyear,
partno, Pos, number
from #t2
unpivot
(
number
for Pos in ([Pos1], [Pos2], [Pos3], [Pos4])
) unpvt
)
select * into ##temp
from data
pivot
(
sum(number)
for inspectyear in (' + @inspectyear + ')
) pvt
order by Part'
exec sp_executesql @query = @query;
select * from ##temp;
drop table ##temp;
上記の表から、Calc1
があります2013年Calc2
2015マイナス値の値は、式は、上記の新しいレコードcを変更します2009年
2015マイナス値の値であり、 2017年にreated。したがって、Calc1の式は常に年の最後の2つの値を取得します。 Calc2は、常に最新の値から最も古い値を引いた値を取得します。
これについて誰かが考えていますか?
ありがとうございます。
Plはhttp://stackoverflow.com/questions/10428993/understanding-pivot-function-in-t-sql – yuvi
@yuviで確認します。リンクありがとうございます。しかしピボットのものについては、私はそれを得た。私が尋ねることは、2つの最新の年と最も古い値から値を取得する方法です。だから私は、テーブルがピボット回転する前に計算をすることができます。ピボットは動的であるためです。 – Haminteu
@BeanFrog、私はピボットのことをしました、そして、私は動的なピボットの計算をする方法を混同します。そういうわけで、おそらくテーブルを回転させる前に計算をしなければならないのです。 – Haminteu