如果在MS Access SQL Query中的WHERE子句中则为Then

时间:2016-06-29 01:52:39

标签: sql ms-access

我正在尝试MS Access SQL查询。我的数据结构如下 Rent Table

这个想法是我希望拆分表以使用[Year_Start]和[Month_Start]作为基础收集最近12个月的启动。所以我粗略的代码将是:

SELECT [Renter_Name], [Amount]
FROM RentTable1
WHERE [Year_Start] = Max([Year_Start]) AND [Month_Start] = Max([Month_Start])
ORDER BY [Renter_Name];

随后,其他月份表将在概念上编码如下:

SELECT [Renter_Name], [Amount]
FROM RentTable1
WHERE [Year_Start] = Max([Year_Start]) AND [Month_Start] = Max([Month_Start]) - 1
ORDER BY [Renter_Name];

然后将使用减号调整后续月份。

SELECT [Renter_Name], [Amount]
FROM RentTable1
WHERE [Year_Start] = Max([Year_Start]) AND [Month_Start] = Max([Month_Start]) - 2
ORDER BY [Renter_Name];

我还考虑了[Month_Start] = Max([Month_Start])的情况 - x将为零(0)或负数,因此理论代码为:

    SELECT [Renter_Name], [Amount]
    FROM RentTable1
    IF Max([Month_Start]) - X <= 0 THEN 
       WHERE [Year_Start] = Max([Year_Start]) - 1 AND [Month_Start] = Max([Month_Start]) - X
    ELSE
       WHERE [Year_Start] = Max([Year_Start]) AND [Month_Start] = Max([Month_Start]) - X
    END IF
    ORDER BY [Renter_Name];

*** X是从最近一个月和一年开始落后的月份。

显然,您看到我的SQL编码技能非常弱。请原谅我,因为我真的是初学者。因此,有一些其他标准编程,如If-Then-Else语句。

我希望有人可以建议纠正上述代码。

谢谢!感谢每个偶然发现这个问题的人。

编辑1:

只是澄清一下,这是预期的想法:

在示例中,最新的时段是2016年和4年。所以它应该为TABLE1选择它。

后续查询将从最近一个月开始减去一个月,因此结果应为2016年和3年。这将持续到2016年和1年。

当4 - 4发生等于0时,查询应该能够跳过这个不合逻辑的步骤并通过(2016 - 1)并使用(2016 - 1)的结果得到最大月份,即2015年和12。

1 个答案:

答案 0 :(得分:1)

首先,我的建议是:处理日期时使用DATE数据类型。您可以将StartDate指定为2016-04-01,将EndDate指定为2017-04-31。更好的是:将EndDate指定为2017-05-01,并始终记住您需要使用&gt; =作为StartDate和&lt;对于EndDate。

现在,你的问题。您需要使用[DateSerial()][1]函数将列转换为正确的日期,如下所示:

SELECT [Renter_Name], [Amount]
FROM RentTable1
WHERE DateSerial([Year_Start], [Month_Start], 1) = 
    (SELECT Max(DateSerial([Year_Start], [Month_Start], 1) as dt FROM RentTable1)
ORDER BY [Renter_Name];

要获取上个月的详细信息,请使用DateAdd()功能。以下是上个月的示例:

SELECT [Renter_Name], [Amount]
FROM RentTable1
WHERE DateSerial([Year_Start], [Month_Start], 1) = 
    (SELECT DateAdd('m', -1, Max(DateSerial([Year_Start], [Month_Start], 1)) as dt FROM RentTable1)
ORDER BY [Renter_Name];

以下是获取X个月前详细信息的通用查询:

SELECT [Renter_Name], [Amount]
FROM RentTable1
WHERE DateSerial([Year_Start], [Month_Start], 1) = 
    (SELECT DateAdd('m', [X] * (-1), Max(DateSerial([Year_Start], [Month_Start], 1)) as dt FROM RentTable1)
ORDER BY [Renter_Name];