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
膳食应等于的与会嘉宾总人数的总数。
任何帮助非常感谢。
(因为你从来没有提到它的名字,我会打电话给第二台tbl_Invitations
在这个答案)
SQL查询最简单的数据库设计,是标准化的完成(看What are 1NF, 2NF and 3NF in database design?为这是什么意思这实际上不适合这个问题,但我没有找到任何更快的搜索后更好)。
应该避免在tbl_Invitations
的4列上分布相同类型的信息(用餐选项)。相反,创建一个包含两列的第三个表格(Invitation_ID
和Meal_Option
,各自的主键为tbl_Invitations
和tbl_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_Option
是tbl_Meal_Options
和Meal
文字说明主列)
正如你所看到的,如果你想改变每次邀请的餐饮次数(你可能不会这样做,但是不管怎么说...),这是一个更加精细和小比例的小比例尺。
如果您可以使用http://www.sensefulsolutions编辑您的问题并添加一些示例数据,那么这将会更有帮助,而不是用散文描述您的表格和数据。com/2010/10/format-text-as-table.html。只需从Access数据表或Excel中复制一些数据,然后格式化为“MySQL”,将输出复制到您的问题并作为代码格式化。 – Andre