2011-06-27 5 views
0

私は宿泊タイプのリストとそれらを使用する人々がいるテーブルを持っています。一部の人は複数の宿泊施設を使用しています。可能な宿泊施設タイプの組み合わせごとに、各宿泊タイプとその番号を使用する人数のカウントを表示するにはどうすればよいですか?各カテゴリのユーザーは、そのカテゴリ内ですでに一意です。MS Access - SQL TRANSFORMなどを使用してフィールドの組み合わせを表示

例:

 
AccomType NameID 
A   1 
A   2 
B   1 
B   3 
B   4 
B   5 
C   1 
C   4 

私はこれを行うことができますTRANSFORMとは思わない

 
AccomType Count 
A   2 
B   4 
C   2 
A&B  1 
B&C  2 
A&C  2 
A&B&C  3 

のような出力が欲しい、それがSQLでこれを行うにはかのうでしょうか?私はVBAを使用しないことを好みますが、それが唯一の/最も簡単な方法であれば可能です。また、年(08/09、09/10など)の同じテーブルにフィールドがあり、それがどこのソリューションに影響を及ぼさない限り、WHEREを使用することを計画していることでフィルタリングしますか?

EDIT:私はピボットテーブルを試しましたが、それは行とフィールドの両方に同じフィールドを使用させませんし、3つの交差の組み合わせ(A & B & Cが発生する)を表示しません。

答えて

0

基本的に、UNIONを行うグループごとにクエリを実行する必要があります。そして結果を数えてください。

SELECT 
    AccomType, 
    SUM([Tick]) as Count 

FROM (

    SELECT 
     "A" as AccomType, 1 as Tick, 1 as SortOrder 
    FROM 
     Name_AccomType 
    WHERE 
     AccomType = "A" 

    UNION ALL SELECT 
      "B" as AccomType, 1 as Tick, 2 as SortOrder 
    FROM 
     Name_AccomType 
    WHERE 
     AccomType = "B" 

    UNION ALL SELECT 
     "C" as AccomType, 1 as Tick, 3 as SortOrder 
    FROM 
     Name_AccomType 
    WHERE 
     AccomType = "C" 

    UNION ALL SELECT 
     "A&B" as AccomType, 1 as Tick, 4 as SortOrder 
    FROM 
     Name_AccomType 
    WHERE 
     AccomType in ("A", "B") 
    GROUP BY NameID 
    HAVING COUNT(NameID) = 2 

    UNION ALL SELECT 
     "B&C" as AccomType, 1 as Tick, 5 as SortOrder 
    FROM 
     Name_AccomType 
    WHERE 
     AccomType in ("B", "C") 
    GROUP BY NameID 
    HAVING COUNT(NameID) = 2 

    UNION ALL SELECT 
      "A&C" as AccomType, 1 as Tick, 6 as SortOrder 
    FROM 
     Name_AccomType 
    WHERE 
     AccomType in ("A", "C") 
    GROUP BY NameID 
    HAVING COUNT(NameID) = 2 

    UNION ALL SELECT 
      "A&B&C" as AccomType, 1 as Tick, 7 as SortOrder 
    FROM 
     Name_AccomType 
    WHERE 
     AccomType in ("A", "B", "C") 
    GROUP BY NameID 
    HAVING COUNT(NameID) = 3 
) as t 
GROUP BY 
    AccomType, 
    SortOrder 
ORDER BY 
    SortOrder 
+0

ありがとうございます。完全に働いた。 – vbevan

+0

実際には、AccomTypeとして「A&B」を使用した理由、他の場所で** tick **を使用したときに** Count **、4としてSortOrderを使用した理由を尋ねることはできますか? – vbevan

+0

@Vbevanそれはエラーだった私はマシンの前に入るときにそれを修正するが、そのスタイルエラー。ユニオン内の最初の選択項目の列名のみがカウントされます。 –

関連する問題