我对SQL非常缺乏经验,我遇到了以下问题:我有一个公司和他们的供应商之间的交易表。在很多其他列中,我有交易日期和供应商帐户代码以及交易日期。我现在需要做的是检查有多少供应商是新的,经常性和非活动的给定日期。因此,如果供应商X在2013年和2014年显示交易日期,那么他将是一个经常性的供应商,如果他在2014年仅显示交易日期,那么他将是新的,并且仅在2013年是非活动的。现在我不仅需要比较2014年到2013年,还要比较日期和年终日期等等。到目前为止我所做的是为所有事情创建单独的查询,这是很多工作,似乎有点低效。目前我会查询“DecToOct14”和“SepToJan14”:
SELECT DISTINCT (vendor_account_cd)
FROM [Doc Year & Period]
WHERE Doc_Period > 9 AND Doc_Year = '2013';
SELECT DISTINCT (vendor_account_cd)
FROM [Doc Year & Period]
WHERE Doc_Period < 10 AND Doc_Year = '2014';
然后这个显示实际结果:
SELECT
Count (*)
AS Recurring_CY_Comp1
FROM (
SELECT DISTINCT ( [Doc Year & Period].vendor_account_cd )
FROM [Doc Year & Period]
INNER JOIN DecToOct14 ON [DecToOct14].vendor_account_cd = [Doc Year & Period].vendor_account_cd
WHERE [Doc Year & Period].Doc_Year = 2014 AND [Doc Year & Period].Doc_Period <=9
);
查询正在运行并提供所需的结果,但理想情况下,我希望所有这些都在一个查询中,如果不可能,那么至少将所有计数都放在一个查询中:
SELECT
Count (*)
AS Recurring_CY_Comp1
FROM (
SELECT DISTINCT ( [Doc Year & Period].vendor_account_cd )
FROM [Doc Year & Period]
INNER JOIN DecToOct14 ON [DecToOct14].vendor_account_cd = [Doc Year & Period].vendor_account_cd
WHERE [Doc Year & Period].Doc_Year = 2014 AND [Doc Year & Period].Doc_Period <=9
) ,
Count (*)
AS Recurring_Comp1_PY
FROM (
SELECT DISTINCT ( [Doc Year & Period].vendor_account_cd )
FROM [Doc Year & Period]
INNER JOIN SepToJan14 ON [SepToJan14].vendor_account_cd = [Doc Year & Period].vendor_account_cd
WHERE [Doc Year & Period].Doc_Year = 2013 AND [Doc Year & Period].Doc_Period > 9
);
正如我所说,我对此非常陌生,并且没有想法。我可以为每个分析构建一个查询,但总的来说它将是24个不同的分析,如果我每个需要一个或两个查询,那将是一团糟。代码有点混乱,因为我使用的是MS Access,对不起。
感谢您的帮助!