从相同的 table 生成比较
Generating comparison from same table
我正在尝试创建一个显示
的查询
- 某个时期的成员数量,并且
- 同一组织不同时期的成员。
这是为了生成历史比较。
目前我有 2 个相同的表来完成此操作,但我正在尝试通过查询生成它。
目前我有2个相同的查询如下:
SELECT CU_Info.CU_Name, Membership.Period,
Membership.[Membership_#],CU_Info.Province
FROM CU_Info
INNER JOIN Membership
ON CU_Info.CU_Name = Membership.CU_Name
WHERE (((Membership.Period)=[Forms]![Members_By_Province]![cboPeriodProvince])
AND ((CU_Info.Province)=[Forms]![Members_By_Province]![cboProvince]));
然后另一个组合和比较 2 个查询:
SELECT qryNowProv.CU_Name, qryNowProv.[Membership_#],
qryCompProv.CU_Name, qryCompProv.[Membership_#], qryCompProv.Province
FROM qryNowProv, qryCompProv;
结果如下:
Bank1, 1000, Bank1, 9000, QE
Bank1, 1000, Bank2, 9500, QE
现在列中有重复信息,比较列中有循环数据。我希望它比较相同银行的会员数量,但在不同的时间段(用于增长比较)。
您可以使用 sum by case 语句来更快地执行此操作。
SELECT CU_Info.CU_Name, [Forms] ! [Members_By_Province] ! [cboPeriodProvince] AS Period, SUM(CASE
WHEN (Membership.Period) = [Forms] ! [Members_By_Province] ! [cboPeriodProvince]
THEN Membership.[Membership_#]
ELSE 0
END) PeriodMembership, SUM(CASE
WHEN (Membership.Period) = [Forms] ! [Members_By_Province] ! [cboPeriodProvince]
THEN 0
ELSE Membership.[Membership_#]
END) OutsidePeriodMembership, CU_Info.Province
FROM CU_Info
INNER JOIN Membership ON CU_Info.CU_Name = Membership.CU_Name
WHERE (
((Membership.Period) =)
AND ((CU_Info.Province) = [Forms] ! [Members_By_Province] ! [cboProvince])
);
GROUP BY CU_Info.CU_Name, CU_Info.Province
我可能会从一些简单的子查询开始执行此操作,一个到 return 每个日期的成员计数:
SELECT first_period.CU_Name, first_membership, second_membership
second_membership - firt_membership AS membership_difference
FROM
(
SELECT CU_Name, [Membership_#] AS first_membership
FROM Membership
WHERE Period = 1
) first_period
INNER JOIN
(
SELECT CU_Name, [Membership_#] AS first_membership
FROM Membership
WHERE Period = 2
) second_period
ON first_period.CU_Name = second_period.CU_Name
显然,您需要根据自己的具体要求(特别是 WHERE Period = whatever
)对此进行调整,但这应该能让您入门。
我正在尝试创建一个显示
的查询- 某个时期的成员数量,并且
- 同一组织不同时期的成员。
这是为了生成历史比较。
目前我有 2 个相同的表来完成此操作,但我正在尝试通过查询生成它。
目前我有2个相同的查询如下:
SELECT CU_Info.CU_Name, Membership.Period,
Membership.[Membership_#],CU_Info.Province
FROM CU_Info
INNER JOIN Membership
ON CU_Info.CU_Name = Membership.CU_Name
WHERE (((Membership.Period)=[Forms]![Members_By_Province]![cboPeriodProvince])
AND ((CU_Info.Province)=[Forms]![Members_By_Province]![cboProvince]));
然后另一个组合和比较 2 个查询:
SELECT qryNowProv.CU_Name, qryNowProv.[Membership_#],
qryCompProv.CU_Name, qryCompProv.[Membership_#], qryCompProv.Province
FROM qryNowProv, qryCompProv;
结果如下:
Bank1, 1000, Bank1, 9000, QE
Bank1, 1000, Bank2, 9500, QE
现在列中有重复信息,比较列中有循环数据。我希望它比较相同银行的会员数量,但在不同的时间段(用于增长比较)。
您可以使用 sum by case 语句来更快地执行此操作。
SELECT CU_Info.CU_Name, [Forms] ! [Members_By_Province] ! [cboPeriodProvince] AS Period, SUM(CASE
WHEN (Membership.Period) = [Forms] ! [Members_By_Province] ! [cboPeriodProvince]
THEN Membership.[Membership_#]
ELSE 0
END) PeriodMembership, SUM(CASE
WHEN (Membership.Period) = [Forms] ! [Members_By_Province] ! [cboPeriodProvince]
THEN 0
ELSE Membership.[Membership_#]
END) OutsidePeriodMembership, CU_Info.Province
FROM CU_Info
INNER JOIN Membership ON CU_Info.CU_Name = Membership.CU_Name
WHERE (
((Membership.Period) =)
AND ((CU_Info.Province) = [Forms] ! [Members_By_Province] ! [cboProvince])
);
GROUP BY CU_Info.CU_Name, CU_Info.Province
我可能会从一些简单的子查询开始执行此操作,一个到 return 每个日期的成员计数:
SELECT first_period.CU_Name, first_membership, second_membership
second_membership - firt_membership AS membership_difference
FROM
(
SELECT CU_Name, [Membership_#] AS first_membership
FROM Membership
WHERE Period = 1
) first_period
INNER JOIN
(
SELECT CU_Name, [Membership_#] AS first_membership
FROM Membership
WHERE Period = 2
) second_period
ON first_period.CU_Name = second_period.CU_Name
显然,您需要根据自己的具体要求(特别是 WHERE Period = whatever
)对此进行调整,但这应该能让您入门。