多列透视和计数

Pivot with multiple columns and Count

对 SQL 很陌生,目前完全迷失了。我有一个 table 看起来像这样:

 AccountNr  |     Year1     |    Year2
-----------------------------------------
       121  |      New     |      N/A
       131  |   Recurring  |      New
       116  |   Recurring  |     Recurring
       123  |    Inactive  |     Recurring
       112  |   Invactive  |     Inactive

所以简单地显示客户在给定年份的帐户状态。我需要计算我在第 1 年、第 2 年和所有后续期间拥有的新帐户、非活动帐户、经常帐户和 N/A 帐户的数量。理想情况下,我希望它看起来像这样:

Status      |   Year1      |   Year2 
-----------------------------------------
      New   |      1       |      1
 Recurring  |      2       |      2
 Inactive   |      2       |      1
   N/A      |      0       |      1

不必看起来完全像这样,它只需要计算每年每种状态有多少个帐户。顺便说一句,我正在使用 MS Access。

感谢您的帮助!!

我认为您无法通过单个查询在 MS Access 中始终如一地执行此操作。对于您的特定数据,您可以执行以下操作:

select y2.status, nz(y2.year1, 0) as year1, y2.year2
from (select t.year2 as status, count(*) as year2
      from t
      group by t.year2
     ) as y2 left outer join
     (select t.year1 as status, count(*) as year1
      from t
      group by t.year1
     ) as y1
     on y1.status = y2.status;

这是可行的,因为所有状态都在 year2 列中。

如果您有单独的 table 状态,您可以:

select s.status, nz(y2.year1, 0) as year1, nz(y2.year2, 0) as year2
from statuses as s left outer join
     (select year2 as status, count(*) as year2
      from t
      group by year2
     ) as y2
     on y2.status = s.status left outer join
     (select year1 as status, count(*) as year1
      from t
      group by year1
     ) as y1
     on s.status = y1.status;