多列透视和计数
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;
对 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;