2016-05-01 82 views
0

我已經搜索了多個帖子尋找答案,我似乎無法找到一個可以很好地解釋解決方案的帖子。我覺得這應該是相對簡單的: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

回答

0

(因爲你從來沒有提到它的名字,我會打電話給第二臺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