1

Access 2007 を使用していますが、クエリの作成についてサポートが必要です。これが非常に長い場合は、申し訳ありません!詳細が多いほど理解が深まると思います。私はプログラマーではありません。誰かが助けてくれることを願っています

非数値データを特性/値を共有する単一の行に折りたたむ/要約する/ロールアップする方法を知る必要があります。私が欲しいのは、クロス集計クエリのようなものです。その共有/共通値の1つの行に沿って、異なる行からの一意のセル値をピボット/列に表示したいからです。ただし、私のデータは数値ではなく、クロス集計では禁止されているアルファベットの列見出しが必要です。

データ:

  • Badge_code 24 は、110、210、および 320 の 3 つの場所で生成されます (シカゴ、ロックフォード、およびセントルイスを表します)。
  • Badge_code B9 の 2 か所: 110 と 280 (シカゴとピオリア)
  • Badge_code C1 の 3 つの場所: 200 と 210 (インディアナポリスとロックフォード)

各 Badge_code-location の組み合わせは、合計 8 行の個別の行にあります。バッジ コードの数は増える可能性があります。

私が試したクエリ:

Count(tbl_BadgeType.Badge_type_number) AS CountOfBadge_type_number
SELECT tbl_BadgeType.Badge_code
FROM tbl_BadgeType
GROUP BY tbl_BadgeType.Badge_code
PIVOT tbl_BadgeType.Location_production;

Badge_type_number は、各バッジ コード位置使用コンボを識別するために使用される主キーです。

結果:

Badge Code     110   200   210  280  320
24             1           1         1
B9             1                1    
C1                   1     1         

列見出しは数値であり、クロス集計の場所の名前に変更できません。「1」ではなく「はい」が必要です。(明らかに、クロスタブのカウント関数であるため、これらは 1 であり、実際には必要ありません...)

望ましい結果:

Badge Code     Chicago  Indianapolis   Rockford  Peoria  St. Louis
24             Yes      No             Yes       No      Yes
B9             Yes      No             No        Yes     No
C1             No       Yes            Yes       No      No

問題/質問:

  1. 厳密な意味でのクロス集計クエリは必要なものではありませが、その「ロールアップ」効果をシミュレートする方法がわかりません。これは、6 ページのあいまいさと 1 ページの有用な明快さの違いです。
  2. クロス集計適している場合、「1」の値を「はい」として表示する方法がわかりません。他のクエリやレポートで IIF ステートメントを使用して、1/0 値を「はい/いいえ」に「変換」しましたが、このクエリまたはそのレポートのどこに IIF を配置すればよいかわかりません。

これは理にかなっていますか?求めすぎですか?私に希望はありますか?:^)

4

2 に答える 2

1

わお!こんなに早く返事が来るとは思っていませんでした。

tbl_BadgeTypes の関連フィールドの構造とサンプル データは次のとおりです。

Badge_code     Badge_description(both are Text fields)
01             Faculty/staff
04             College of Law
62             Student-Peoria
86             Visitor
B7             Police 

バッジ コードが実際に使用される場所は tbl_TokenInstance (トークンの各インスタンスの行 - バッジ、ID など) にあります。バッジ コードはさまざまな場所で使用される場合があります。それらは排他的ではありません。関連するデータは次のとおりです。

  Instance_number(autonumber)  Prod_site_num(Integer)   Badge_code(text)
   1                            110                      B7
   3                            110                      B7
   4                            110                      B7
   27                           310                      04
   15                           210                      62
   21                           110                      62
   16                           110                      01
   22                           210                      01
   25                           310                      01
   31                           110                      86
   32                           120                      86

最後に、本番サイトの番号と説明のソース リストは list_ProductionSite にあります。

  Production_site_number        Production_site_description
  110                           Chicago IDC
  120                           Chicago CS
  210                           Springfield IDC
  310                           Champaign IDC
  320                           Champaign CS
于 2009-08-13T19:28:41.783 に答える
0

わかりましたので、上に残したコメントへの保留中の応答です。いくつかの部分的な解決策を提案できます (テーブルの外観によっては、よりクリーンな解決策が得られる場合があります)。

問題 #1: 数値からテキストへ

[Location_production] を「シカゴ」などの文字列に一致させることができるテーブルがある場合、「110」を「シカゴ」と表示させるために必要なのは内部結合だけです。試したクエリの 3 行目は、次のようになります。

FROM tbl_BadgeType AS T INNER JOIN tbl_Locations AS L ON T.Location_production = L.ID 

次に、L.LocationNameまたは実際のテキストが何であれ、クロス集計します。

問題#2:「1」から「はい」

一般的に言えば、「1」を「はい」に変更するには、vb iif 式を交換するだけです。

ProducesHere: iif([Badge_type_number]>0, "Yes","No")

データがどのように見えるかに応じて、クエリの一番上の行で「Count()」を「Max()」または「Min()」に変更し、場合によっては他の変更を加える必要があります。

于 2009-07-01T01:33:13.823 に答える