1

現在のスタッフデータベースから従業員ID、従業員名、チーム名を検索するクエリがあります。チーム名のすべての一意の値を一覧表示する別のクエリがあります。(チーム名は整数であり、従業員IDにも対応します。これも整数です。)

たとえば、これがチームの構成方法です。Emp ID 100は、EmpID10のチームに属しています。10は5に属します。5は1に属します。

EmpID = 100 TeamName = 10

EmpID = 10 TeamName = 5

EmpID = 5 TeamName = 1

私がやろうとしているのは、チーム名クエリにEmp IDも表示されている場合にアスタリスク「*」を付けて4番目のフィールドを返すことです(つまり、チームを持っている/マネージャーであることを意味します)。

私は機能するDCountを持っていますが、それは私が望むよりも遅く、データベースが大きくなるにつれて遅くなるだけですが、それは私が必要としているものを説明するのに役立つかもしれません。

Expr1:IIf(DCount( "TeamName"、 "jdbo_MostRecentEmpDataRemain"、 "TeamName ="&[EmpID])> 0、 "*"、 "")

jdbo_MostRecentEmpDataRemainは、アクティブなスタッフのすべてのデータを返すクエリです。

これにより、EmpIDにチームメンバーが割り当てられている場合はアスタリスクが返され、割り当てられていない場合は何も返されません。

これをクエリで適用して高速化できるかどうか疑問に思っています。何か提案があれば教えてください。

私はこれを試しました:Expr2:IIf([EmpID] In([qryListOfTeams]。[TeamName])、 "a"、 "z")しかし、それは多くのzを返し、次にaを返します。チームリストにある値。それらを集約し、aがある場合はaを表示し、そうでない場合はzを表示したいと思います。(元の「*」はaで、「」はzです)

敬具、

ジェイミー・ウォーバートン

4

1 に答える 1

1

どうですか:

 SELECT * FROM TableOrQuery
 LEFT JOIN (SELECT DISTINCT EmpID FROM Teams 
            WHERE EmpID In (SELECT TeamName FROM Teams)) As a
 ON TableOrQuery.EmpID =  a.EmpID

派生テーブルは通常、サブクエリよりも高速です。

再コメントを編集

アスタリスクには特定の意味があるため、これを行うことはできますが、お勧めしません。

 SELECT TableOrQuery.*, a.IsTeam FROM TableOrQuery
 LEFT JOIN (SELECT DISTINCT EmpID, "*" As IsTeam FROM Teams 
            WHERE EmpID In (SELECT TeamName FROM Teams)) As a
 ON TableOrQuery.EmpID =  a.EmpID
于 2012-07-17T09:56:53.180 に答える