代码之家  ›  专栏  ›  技术社区  ›  Krishna Kumar

从日期开始使用月份的Access数据库查询

  •  1
  • Krishna Kumar  · 技术社区  · 17 年前

    日期事件日期位(布尔值)午餐, 比特(布尔)零食,比特(布尔)茶,

    我希望有一个查询,给出给定月份(使用eventdate)的luch、零食和茶(每个列)的计数。

    谢谢你的帮助。

    3 回复  |  直到 17 年前
        1
  •  3
  •   HansUp    17 年前

    在Access中,True为-1,False为0。所以你可以用这些值之和的绝对值来表示有多少是真的。

    SELECT Abs(Sum(lunch)) AS SumofLunch, Abs(Sum(snacks)) AS SumofSnacks, Abs(Sum(Tea)) AS SumofTea
    FROM YourTable
    WHERE eventDate >= #2009/08/01# And eventDate < #2009/09/01#;
    
        2
  •  2
  •   Ikarii Warrior    17 年前

    SELECT SUM(ABS(lunch)) AS lunchCount, SUM(ABS(snacks)) AS snackCount, SUM(ABS(tea)) AS teaCount
    FROM <TableName>
    WHERE eventDate >= #1/1/2009# AND eventDate < #2/1/2009#
    
        3
  •  0
  •   Jakkwylde    17 年前

    我会在access中使用IIF语句(就像其他数据库中的CASE语句一样)来攻击它。当指定的条件为true(在第一个逗号之后)时,访问中的IIF返回一个值;如果计算结果为false(在第二个逗号之后),则返回另一个值。因为您使用的是布尔函数,所以检查真实条件并通过累计和进行汇总将为您带来好处。

    SELECT Month(EventDate) AS TheMonth, Year(EventDate) AS TheYear, 
    SUM(IIF(Lunch, 1, 0)) AS LunchCount,
    SUM(IIF(Snacks, 1, 0)) AS SnackCount,
    SUM(IIF(Tea, 1, 0)) AS TeaCount
    FROM YourTable
    GROUP BY Month(EventDate), Year(EventDate)
    ORDER BY Month(EventDate), Year(EventDate)
    

    当然,上面的查询返回的是所有月份和年份,但是如果需要的话,您可以很容易地输入下面这样的日期范围。

    SELECT Month(EventDate) AS TheMonth, Year(EventDate) AS TheYear, 
    SUM(IIF(Lunch, 1, 0)) AS LunchCount,
    SUM(IIF(Snacks, 1, 0)) AS SnackCount,
    SUM(IIF(Tea, 1, 0)) AS TeaCount
    FROM YourTable
    WHERE EventDate BETWEEN #1/1/2009# AND #1/31/2009#
    GROUP BY Month(EventDate), Year(EventDate)
    ORDER BY Month(EventDate), Year(EventDate)
    
    推荐文章