指定された範囲の月ごとの特定のUserRatingを取得しようとしています。以下でこれを使用すると、余分な行なしで機能します。
Select
Distinct(Table2.AccountNumber),
Jan11=Case
When Datepart(yy,Org.Billdate)=2011 and Datepart(mm,Org.Billdate) = 01 then Table2.UserRating
END
From (
Select Distinct(Table1.AccountNumber) as UseThisNumber, Table1.RegionID as UseThisRegionID
From AccountDetail Table1
Where Table1.RegionID in (
Select Distinct(Reg.RegionID)
From RegionOrganizationTable Reg where Datepart(yy,Reg.Billdate)=2011 and Datepart(mm,Reg.Billdate) = 01) and
Table1.UserRating in (‘Very Satisfied’, ‘Mostly Satisfied, ‘Satisfied’)
Group by Table1.AccountNumber, Table1.RegionID) GroupedValues,
AccountDetail Table2
RegionOrganizationTable Org
Where Table2.AccountNumber =GroupedValues.UseThisNumber
and Table2 UseThisRegionID=GroupedValues.UseThisRegionID
and Org.RegionID= GroupedValues.UseThisRegionID
Order by Table2.AccountNumber
ただし、ネストされたコンポーネントのDatepart基準を次のように変更すると、次のようになります。
Datepart(yy,Reg.Billdate)>2010
(これは実際に調べたい日付範囲であるため)、削除します。
Datepart(mm,Reg.Billdate)=01
2011年1月から以前に修飾されたAccountNumbersはすべて繰り返されますが、NULL値を返します。これは、他の月を追加するとさらに複雑になります(つまり、Feb11 = Case when ....)
最初のシナリオでの出力は次のようになります。
AccountNumber ..... Jan11123456
...................非常に満足
143457...................ほとんど満足
163458...................満足
183459...................非常に満足
203460....。 ..............非常に満足
そして、これが2番目です(認識しやすいように、ここで複製を太字にしました)
AccountNumber ..... Jan11123456
...................非常に満足
123456...................NULL
123499 ................... NULL 133499 ...................
NULL143457
......。 ............ほぼ満足
143457...................
NULL143499.............。 ..... NULL
153499 ................... NULL
163458 ...................
NULL163458。 ..................満足
173458...................
NULL173499........。 ..........
NULL183459...................非常に満足
183459................ ... NULL
183499 ................... NULL
193459 ................... NULL
203460 .. .. ................
NULL203460...................非常に満足