从同一个表生成比较

时间:2015-07-06 18:57:21

标签: sql ms-access-2010

我正在尝试创建一个显示

的查询
  • 特定时期的会员数量
  • 具有相同组织的不同时期的成员。

这是为了产生历史比较。

目前我有2个相同的表来完成此任务,但我正在尝试使用查询生成它。

目前我有两个相同的查询如下:

SELECT qryNowProv.CU_Name, qryNowProv.[Membership_#],
  qryCompProv.CU_Name, qryCompProv.[Membership_#], qryCompProv.Province
FROM qryNowProv, qryCompProv;

然后另一个组合并比较2个查询:

Bank1, 1000, Bank1, 9000, QE
Bank1, 1000, Bank2, 9500, QE

这导致以下结果:

{{1}}

在“立即”列中重复信息并在“比较”列中循环数据。我想比较相同的银行会员号码,但是在不同的时间段(进行增长比较)。

2 个答案:

答案 0 :(得分:0)

您可以使用逐个语句来更快地执行此操作。

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

答案 1 :(得分:0)

我可能会开始使用一些简单的子查询来执行此操作,一个用于返回每个日期的成员资格计数:

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),但这应该可以帮助您入门。