システムwiki

クエリのトラブルシューティング

Z_A_S 受付中 最終更新日:2021-05-02 02:46

こんにちは、

私は私が協力するのを助ける必要がある多少複雑な問題を抱えています.

基本的に、私は[ID]フィールドと一緒に2つのtableを持っています.TBLDATEとTBLAMAIN.

TBLMAINには、[ID]フィールドと[分類]フィールドからなる複合主キーがあります.

は両表の画像です.

私は都市が何回くらいの都市(City1、City2、City3)がケースにリンクされているかを示すクエリを作成しようとしています.これは私がtblmainに持っている複合キーのために複雑です.

例えば、「ロンドン」が表示される回数を確認するためにクエリを実行する場合は、これを返します.

<キャプション> q1 8
2
2/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") );;;;

以下の表は私が欲しいものです.しかし、私はそこに問題がある問題があります.

分類 Tehran 7 Tehran 8
ID 日付 CITY1 COTY2 City3
2
02-FeB-20 ガンマ Newport News ロンドン
3 03-Mar-20 ベータ ロンドン
7 07-JUL-20 ベータ 香港 ロンドン
8 08-AUG-20 alpha ロンドン ジャマイカ

ID#3とID#7はここで「ベータ」として分類されていることに注意してください.

返信リスト(回答:7)

1 #
QAGuyCo

最初に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 #
Z

IMは再びデータを越えて行く.クエリを完全に無視する方法はありますか?

例えば、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"));

このクエリは正常に機能します.それはまさに私がそれを機能させたい方法です.このクエリは、ロンドンがベータ標数で識別される状況を無視します.

添付の例をご覧ください.

ただし、メインデータベースを同じように設定しても、メインデータベースのクエリが機能しません.

2 #
Scottge

IDのような一般名を使用することはお勧めできません.IDを繰り返すことができれば、それは何をリンクしますか?

とKARLの表が誤って構造化されているという点は、問題の根本です.

あなたのtableは次のようにする必要があります:

tblCasecity

Casecitiyid(PK自動数)

CaseID(FK)

分類ID(FK)

CITYID(FK)

単純なクロス集計クエリは、それぞれの場合に都市がどのくらいリンクされている回数を示します.

応答2# ->にスキップ
3 #
Z
クロス集計クエリを作成して、都市がケースにリンクされている回数を表示できます.ただし、問題の都市にリンクされている[特性]が常に正しく表示されるとは限りません.