クエリのトラブルシューティング
こんにちは、
私は私が協力するのを助ける必要がある多少複雑な問題を抱えています.
基本的に、私は[ID]フィールドと一緒に2つのtableを持っています.TBLDATEとTBLAMAIN.
TBLMAINには、[ID]フィールドと[分類]フィールドからなる複合主キーがあります.
は両表の画像です.
私は都市が何回くらいの都市(City1、City2、City3)がケースにリンクされているかを示すクエリを作成しようとしています.これは私がtblmainに持っている複合キーのために複雑です.
例えば、「ロンドン」が表示される回数を確認するためにクエリを実行する場合は、これを返します.
22/2/2020 |
| ガンマ |
Newport News |
ロンドン |
|
| |
8 | 8/8/2020 | alpha | ロンドン | ジャマイカ |
私の問題はID#3とID#7が表示されていることです.これは、 "London"が "Beta"レコードにのみ入力されているためです.そして私は[ミニクラシシケーション]を持っているので、クエリは "Alpha"にのみ関係しています(最初はアルファベット順にあるため).
は私のクエリのSQLです.
TBLMAIN.ID、TBLDATE.DATEOFCASE、MIN(TBLMAIN.CLASSICIFICES)、MINOFCLASSICATIONとして、FirstOfCity1としてのFirstOfCity1として、FirstOfCity2としての(tblmain.city2)、FirstOfCity3としての(tblmain.city3)FirstOfCity3としての(tblmain.city3)
TBLMAIN INNER参加からTBLMAIN.ID= tBLDATE.ID
tblmain.id、tbldate.dateofcase
((最初(tblmain.city1))= "London")または(((最初(tblmain.city2))= "London"))または((最初(tblmain.city3))= "London") );;;;
以下の表は私が欲しいものです.しかし、私はそこに問題がある問題があります.
ID | 日付 | 分類CITY1 | COTY2 | City3 | ||
202-FeB-20 |
ガンマ |
Newport News |
ロンドン |
|
| |
3 | 03-Mar-20 | ベータ | Tehranロンドン | |||
7 | 07-JUL-20 | ベータ | Tehran香港 | ロンドン | ||
8 | 08-AUG-20 | alpha | ロンドン | ジャマイカ |
ID#3とID#7はここで「ベータ」として分類されていることに注意してください.
返信リスト(回答:7)
最初にtableの構造が間違っています-あなたは繰り返しフィールド-City1、City2、City3などを繰り返してはいけません.都市ごとにレコードを持つ別の関連tableが必要です.あなたが4つの都市があるときに起こるべきことは何ですか?
これを試してみてください-
tblmain.id、tbldate.dateofcase、tblmain.classification、tblmain.city1、tblmain.city2、tblmain.city3
TBLMAIN INNER参加からTBLMAIN.ID= tBLDATE.ID
ここで((最初(tblmain.city1))= "London"))または(((tblmain.city2))= "London"))または(((tblmain.city3))= "London") )
tblmain.id、tbldate.dateofcase;
またはクロス集計クエリを使用してください.
応答1# ->にスキップ4 #ZIMは再びデータを越えて行く.クエリを完全に無視する方法はありますか?
例えば、i id番号の場合は、 "alpha"と "beta"のために2つの異なるレコードである場合、 "Beta"レコードのすべての都市を無視することができますか?アルファもベータ
を超えています
応答1# ->にスキップ7 #Z私が使用するフィールドは、必ずしも繰り返されるフィールドではありません.簡潔さと機密性のために、名前を変更しました.4つの都市はありません.最大3つまでしかありません.
SQLコードを利用しようとしましたが、エラーが発生しました:
私の最終的な目標は、Xtabを作成することです.しかし、私は最初にクエリのXtabをベースにしようとしています.
応答7# ->にスキップ6 #Scottgeこれにより、助けを求めるときに問題が発生します.しかし、原則は同じままです.これらのフィールドに番号が付けられているか、同じデータが含まれていて、フィールド内のデータではなくフィールド名で識別されている場合、その設計は適切ではありません.
応答6# ->にスキップ5 #Zなるほど.ありがとうございます.
しかし、私は多少...問題を解決しました.
私のテストデータベースはこのクエリを使用しています:
SELECT tblMain.ID、tblDate.DateOfCase、Min(tblMain.Classification)AS MinOfClassification、First(tblMain.CIty1)AS FirstOfCIty1、First(tblMain.City2)AS FirstOfCity2、First(tblMain.City3)AS FirstOfCity3
FROM tblMain INNER JOIN tblDate ON tblMain.ID=tblDate.ID
GROUP BY tblMain.ID、tblDate.DateOfCase
HAVING(((tblDate.DateOfCase)>=#1/1/2020#)AND((First (tblMain.CIty1))= "London"))OR(((tblDate.DateOfCase)>=#1/1/2020#)AND((First(tblMain.City2))= "London"))OR((( tblDate.DateOfCase)>=#1/1/2020#)AND((First(tblMain.City3))= "London"));このクエリは正常に機能します.それはまさに私がそれを機能させたい方法です.このクエリは、ロンドンがベータ標数で識別される状況を無視します.
添付の例をご覧ください.
ただし、メインデータベースを同じように設定しても、メインデータベースのクエリが機能しません.
IDのような一般名を使用することはお勧めできません.IDを繰り返すことができれば、それは何をリンクしますか?
とKARLの表が誤って構造化されているという点は、問題の根本です.
あなたのtableは次のようにする必要があります:
tblCasecity
Casecitiyid(PK自動数)
CaseID(FK)
分類ID(FK)
CITYID(FK)
単純なクロス集計クエリは、それぞれの場合に都市がどのくらいリンクされている回数を示します.