2

ビジネス名を返す SQL クエリを作成しようとしています。従業員はチームのメンバーであり、グループのメンバーであり、チームとグループはビジネスのメンバーです。

全体として特定の属性を持つチームのメンバーである従業員がいるビジネスを選択する必要があります。

会員と上級会員の比率が % であるビジネスを返す SQL を作成するにはどうすればよいですか? 元チーム A には、100 人のチーム メンバーのうち 20 人の上級従業員しかいません。したがって、失敗し、チーム A が属するビジネスが返されます。

チームに基づいて従業員をグループ化する必要があることはわかっていますが、どういうわけか、SENIOR=NO に対して SENIOR=YES を持つ従業員を数え、所属するビジネスを返す必要があります。アイデア?

これらは機密情報を含む MS Access テーブルですが、テーブルは次のように設定されていると考えることができます。

tblBusiness: BID、BName
tblTeam: TID、TName、TBusRef
tblEmployee: EID、EName、ETeamRef、EBusRef、ESenior

私は文字通りあらゆる種類の SQL を試しました。入れ子になった SQL から重い集計、カウントを含む式まで、あらゆることを行いました。私が得た最も近い(私が思うに)は次のとおりです。

SELECT tblBuisiness.BName FROM tblBuisiness
GROUP BY BName HAVING (
COUNT(SELECT DISTINCT tblEmployee.ETeamRef FROM tblEmployee WHERE ESenior=-1)
/
COUNT(SELECT DISTINCT tblEmployee.ETeamRef FROM tblEmployee)
< 0.5
)

現在、これには構文エラーがある可能性があります(クリップボードにありました)が、100回実行しましたが、最も近いものは「集計 "COUNT()/ <0.5"に式を含めることはできません」でした」

Business1 の TeamA に 20 人のシニア メンバーと 80 人のレギュラー メンバーがいる場合、このクエリは Business1 を返します。

4

2 に答える 2

2

多分:

SELECT * 
FROM (
  SELECT 
    e.EBusRef, 
    Count(e.EID) AS EmpCount, 
    Sum(Abs([ESenior])) AS Senior, 
    [Senior]/([EmpCount]/100) AS [%Senior]
  FROM tblEmployee AS e
  GROUP BY e.EBusRef) q
WHERE q.[%Senior]<=50
于 2012-05-14T21:30:22.260 に答える
0

このようなものでパーセントが得られるはずです。SeniorPercentage フィールドでフィルタリングするには、もう一度ラップする必要があります。

select 
    B1.BName,
    SeniorPercentage = ((select count(1) from tblEmployee E1 inner join tblTeam T1 where T1.TBusRef = B1.BID and E1.ESenior = 1) / (select count(1) from tblEmployee E2 inner join tblTeam T2 where T2.TBusRef = B1.BID))
From
    tblBusiness B1

PS結合を完全には書いていませんが、簡単に追加できます。

于 2012-05-14T19:29:15.703 に答える