MS Access;计数链接值出现在多列中的次数

问题描述:

我已经搜索了多个帖子寻找答案,我似乎无法找到一个可以很好地解释解决方案的帖子。我觉得这应该是相对简单的:MS Access;计数链接值出现在多列中的次数

我有一个婚礼数据库列表用餐选项(tbl_Meal_Options)。例如,它有1列4个值:肉,鱼,鸡肉,素食。

第二张表包含所有发出的邀请。由于邀请最多可邀请4位嘉宾,因此每个邀请行都有4个用餐栏:“Meal_1”,“Meal_2”,“Meal_3”和“Meal_4”。这四列中的单元格链接到Meal_Options表。因此,当收到邀请时,在Meal_1/2/3/4中选择相应的选项作为链接到Meal_Options表的下拉列表。

我希望能够运行一个查询,其中显示了4个项目Meal_Options表,然后统计在Meal_1-4列中选择每个项目的次数。

最终,我正在寻找的东西看起来像下面这样: 鸡57 鱼24 肉39 素食14

膳食应等于的与会嘉宾总人数的总数。

任何帮助非常感谢。

+0

如果您可以使用http://www.sensefulsolutions编辑您的问题并添加一些示例数据,那么这将会更有帮助,而不是用散文描述您的表格和数据。com/2010/10/format-text-as-table.html。只需从Access数据表或Excel中复制一些数据,然后格式化为“MySQL”,将输出复制到您的问题并作为代码格式化。 – Andre

(因为你从来没有提到它的名字,我会打电话给第二台tbl_Invitations在这个答案

SQL查询最简单的数据库设计,是标准化的完成(What are 1NF, 2NF and 3NF in database design?为这是什么意思这实际上不适合这个问题,但我没有找到任何更快的搜索后更好)。

应该避免在tbl_Invitations的4列上分布相同类型的信息(用餐选项)。相反,创建一个包含两列的第三个表格(Invitation_IDMeal_Option,各自的主键为tbl_Invitationstbl_Meal_Options),其中包含应该服务的实际餐饮清单。第一列表示该餐是属于什么邀请,第二列表示需要什么餐选项。

现在您可以简单地使用该表中的SELECT Meal_Option, COUNT(*),将其分组在Meal_Option上。

这将是干净的方法,但你也可以使用当前的表布局检索相同的信息:

SELECT m.Meal, COUNT(*) AS Orders 
FROM tbl_Meal_Options AS m 
LEFT JOIN (
    SELECT Meal_1 AS Meal FROM tbl_Invitations 
    UNION ALL 
    SELECT Meal_2 AS Meal FROM tbl_Invitations 
    UNION ALL 
    SELECT Meal_3 AS Meal FROM tbl_Invitations 
    UNION ALL 
    SELECT Meal_4 AS Meal FROM tbl_Invitations 
) AS i 
ON m.Meal_Option = i.Meal 
GROUP BY m.Meal 

(假设Meal_Optiontbl_Meal_OptionsMeal文字说明主列)

正如你所看到的,如果你想改变每次邀请的餐饮次数(你可能不会这样做,但是不管怎么说...),这是一个更加精细和小比例的小比例尺。

+0

完美答案!谢谢!!我有一种感觉,4餐栏不是处理这个问题的最佳方法,但我需要一些方法来使用仅有的表格(没有开发出花哨的表格)来输入四个选项。我遇到的唯一问题是汇总表现在显示ID号而不是实际值。而不是肉,鱼,鸡等我得到1,2,3,4。我相信它必须处理我的链接列表下拉列表,但我不知道如何解决这个问题。虽然不是最糟糕的问题。你解决了我的主要问题! – Argonax

+0

@Argonax:我更新了查询以包含用餐名称。 – Leviathan

+0

非常感谢您!我会给你的帖子2“检查”,如果它会让我! – Argonax