2011-06-23 9 views
0

私は数週間前に同様の質問をしましたが、今では要件が変更されています。Certified Managersの割合を計算する

考慮すると、以下の表は、: http://www.maroisconsulting.com/Temp/query.png

私は、公認フィールド(Employees.Certified)の日付を持っている経営者(Titles.IsManager)としている従業員の割合を返すクエリを作成する必要があります。結果は、各店舗が入っているグループによってグループ化する必要が

これまでのところ、私はこれがあります。

 
SELECT d.GroupId, 
     Sum(d.cert_complete) AS SumOfcert_complete, 
     Count(d.cert_complete) AS CountOfcert_complete 
FROM (SELECT DISTINCT 
     s.GroupId, 
     e.EmployeeID, 
     IIf(e.Certified Is Null,0,1) AS cert_complete 
    FROM 
     ((Stores AS s 
     INNER JOIN EmployeeStores AS es ON s.StoreId = es.StoreId) 
     INNER JOIN Employees AS e ON es.EmployeeId = e.EmployeeID) 
     INNER JOIN Titles AS t ON e.TitleId = t.TitleId 
    ) AS d 
WHERE t.IsManager 
GROUP BY d.GroupId; 

、あなたがどこに最初のクエリで見ることができ、この

 
SELECT q.GroupId, 
     (SumOfcert_complete/CountOfcert_complete)*100 AS percent_certified, 
     Groups.GroupName 
FROM qryGroupCert_base AS q 
INNER JOIN Groups ON q.GroupId = Groups.GroupId; 

をTitlesテーブルが追加されました。

1)戻ってくる 2)の結果は、私がIsManager

誰もがここで間違っているものを参照してください追加する前よりも異なっていない理由を私は知らないが、私は、IsManagerの入力を求められますか?

感謝

答えて

0

は、あなたがタイトルを含み、このサブクエリが「T」としてエイリアスています

WHERE t.IsManager 

(SELECT DISTINCT 
    s.GroupId, 
    e.EmployeeID, 
    IIf(e.Certified Is Null,0,1) AS cert_complete 
FROM 
    ((Stores AS s 
    INNER JOIN EmployeeStores AS es ON s.StoreId = es.StoreId) 
    INNER JOIN Employees AS e ON es.EmployeeId = e.EmployeeID) 
    INNER JOIN Titles AS t ON e.TitleId = t.TitleId 
) AS d 

その後、サブクエリの定義の後にを、あなたはこのWHERE句を持っています

問題は、 "t"エイリアスとIsManager列がサブクエリ内にのみ存在する - >外部(親)クエリでは不明です。 Accessデータベースエンジンがオブジェクト名、関数、リテラル値、またはSQLキーワードとして認識しないものに遭遇した場合、何かがパラメータでなければならないと考えているので、入力ボックスをポップアップして、 (IsManager)パラメーターの値。

サブクエリの定義の中でWHERE句を移動する必要があると思います。

SELECT d.GroupId, 
     Sum(d.cert_complete) AS SumOfcert_complete, 
     Count(d.cert_complete) AS CountOfcert_complete 
FROM [SELECT DISTINCT 
     s.GroupId, 
     e.EmployeeID, 
     IIf(e.Certified Is Null,0,1) AS cert_complete 
    FROM 
     ((Stores AS s 
     INNER JOIN EmployeeStores AS es ON s.StoreId = es.StoreId) 
     INNER JOIN Employees AS e ON es.EmployeeId = e.EmployeeID) 
     INNER JOIN Titles AS t ON e.TitleId = t.TitleId 
     WHERE t.IsManager = True 
    ]. AS d 
GROUP BY d.GroupId; 
+0

そう思った。ありがとうございました!!! – CoderForHire

0

はおそらく、あなたは、このようなt.IsManager = TRUEとして、t.IsManagerの基準を指定する必要があります。 where句に等しい値を設定する値がない場合、Accessはおそらく実際の列にそれを解決していませんが、クエリパラメータであると考えます。あなたの最初のクエリ内

+0

WHERE句はboolフィールドのため、「WHERE IsManager」は「WHERE IsManager = 1」と同じです。問題は、Titlesテーブルを追加してWHERE句を追加しても、結果が以前と変わらないことです。だから私はクエリがタイトル結合を尊重しているとは思わないが、なぜわからないのですか – CoderForHire

+0

あなたは 'どこIsManager = -1'を意味しないのですか? Access/Jet/ACE/VBAのBoolean TRUEの値は、1ではなく-1です。つまり、Access/Jet/ACEはBoolean WHEREのテストを理解していますが、この質問)、私はまだあなたが明示的に比較値、すなわち 'WHERE IsManager = True'を指定すべきだと思います。理解して読むのがはるかに簡単です。私にとって魅力的なのは、Access QBEグリッドのデザインビューが、グリッドの基準行の '<> False'として' WHERE IsManager'を表すことです。 –

関連する問題