システムwiki

Office:クエリの改善

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

こんにちは、

私は私が必要なものを正確に与えるこのクエリを持っていますが、それはかなり遅いです.それを改善する方法とそれが遅い理由についての説明についていくつかの提案をしたいのですが.これがクエリです:

Distinct Encounters.EncounterPocを選択します(エイリアスとしてのEnsountersからcount(*)を選択する
ensounters.ennouterpoc= alias.encounterpocとbooked= true)
遭遇から;

それが私に与えるものは、職員のリストとそれぞれがタスクを完全に順にしたものです.例えば:

人1 2

人2 7

PERSON3 27

etc ....

返信リスト(回答:5)

1 #
Scottge
代わりに、GroupByクエリを試してください.
応答1# ->にスキップ
2 #
fignewt

右方向にポインタをありがとう.そのクエリははるかに速いです.なぜか教えてくれますか?副照会は本当にアクセス/ジェットDBSが遅いですか?

これは私が今持っているものです:

EncounterPocを選択し、合計としてカウント(*)を選択します. 出会いから
現在= TRUE
EncounterPoc

によるグループ

しかし、私はそれを選択するだけです.だから私の結果はタスクを完了していない私のスタッフのいずれも省略します.次のようなリストが欲しいのですが:

人1 4

人2 0

人37

etc...

ここで/持つ聖書の数分類は、私が欲しいものを私に与えるためにそれを得ることができないようです.

応答2# ->にスキップ
3 #
JohnW.V

EncounterPocとは何ですか?あなたは持っていますか(私はあなたがすることを願っています!)この遭遇の表に関連する職員のtable? Person 2のための[出会い]にレコードがない場合2人が会計を見たいとどのようにアクセスできるかどうか?

使用する表構造には、EmployeIDを主キー(従業員の名前などの伝記データ)とともに2つのtableがあり、Encuntiridを主キーとして、外国人としてのEncunteridを使用してキー.クエリの可能性があります
それから

になります

employees.lastname、employees.firstname、count(*)

従業員から

左結合Encounters

employes.employeeID= Encounters.EmployeEID;

左の結合は、遭遇しなかった貧しい退屈な退屈な敗者でさえ、すべての従業員を返します.:-{)

応答3# ->にスキップ
4 #
fignewt

ヨハネ、

私はあなたの提案された表構造を正規化の目的のためのものをするための適切な方法であることを認識していますが、私はDBAではなく、結合に恐れていて、SQLで最高のMedioCreです.特にアクセスSQL...ALAS My Table構造ははるかに洗練されていません.1table
フォームにそのレコードを入力した人のイニシャルを含むEncounterPocフィールドを使用する.Applicationは、それらがロードのイニシャルを置く必要があります.そのため、tableはそのように見えます.

EncounterPocテキスト

予約YES/NO

etc...(他の無関係のフィールドの束)

「遭遇者のためのレコードがない場合2人にアクセスしたいということをどのようにアクセスできるか? "

人2のレコードがありますが、それがyes/no field=はい記録はありません.私はまだそれらの従業員を捉え、それらのために0の結果を得ることを望みます.だから私の最初のクエリの試みでは、リストを入力するために異なるEncounterpocを選択してください.
レコードを入力したすべての人のうち.

このApplicationを使用している人はかなり高い回転船があります.彼らが私のチームにとって新しいものであるとき、これに対して0人の従業員を持つことは珍しくありません.彼らがするかもしれないが、彼ら自身の欠点を通して!

応答4# ->にスキップ
5 #
JohnW.V

冗談が横ばいになってすみません.私はあなたの従業員を尊重します、そして彼らを摩擦することは私の間違いでした!

あなたのtableのデザインはあなたの質問に答えるのをはるかに難しくしているものです.私はあなたにそれをするためのSQLクエリを書くことができます、しかしそれは私にとってSQL、結合、そして少し頭蓋骨の汗を必要とします、そして私はAccessSQLを知っていて好きです!これをコピーしてSQLwindows に貼り付けてみてください
新しい空白のクエリの場合:

SELECT A.EncounterPOC、Count(B.*)AS CountOfEncounters

FROM Encounters AS A

LEFT JOIN Encounters AS B

ON A.EncounterPOC=B.EncounterPOC

GROUP BY A.EncounterPOC
B.Booked =はいまたはB.BookedがNULLの場合

POCごとに1つのレコードを持つ新しいtableを作成するのは非常に簡単です.RJNを使用する2人の従業員がいる場合に備えて、フィールドPOCID(自動番号、主キー)、EncounterPOC(現在のイニシャル)、およびおそらく名と姓のフィールドを使用します.
イニシャル、および同じ名前の2人の従業員がいる場合に備えて、生年月日や雇用日などの他の情報もあります(Fred A.Brownという名前の3人の男を知っています).空のtableを作成し、APPENDクエリを実行してデータを入力するだけです:

INSERT INTO newtable(EncounterPOC)

SELECT DISTINCT EncounterPOC FROM Encounters;

このtableを使用すると、少し調整を加えて、上記のより単純な結合を使用できます.