1

**明らかに、私の質問は時間に値しないと考える人もいます。心よりお詫び申し上げます。ただし、反対票を投じるのではなく、その時間を使って何か前向きなことをして、少なくともこれがあなたの目にはcr@pの質問にならないようにするために必要な情報を教えてください. **

table にスタッフのリストがあり、 tabletblMembersにクライアントのリストがありますtblClients

1 人で複数のクライアントを持つこともできます。

クライアントに関連付けられたスタッフ メンバーはstaffId、クライアント レコードに対して によって識別されます。

各スタッフ メンバーには、クライアントのタイプのカテゴリ ID がありますcatId

特定のクライアント タイプのすべてのスタッフを検索し、クライアントの数で並べ替える必要があります。クライアントのいないスタッフ メンバーは、表示しないのではなく、0 の結果を表示する必要があります。

単純化されたテーブル構造は次のようになります。

tblMembers:

Id | catId

tblClients:

Id | staffId 

どんな助けでも大歓迎です。

ありがとう!

4

4 に答える 4

2

結合/グループ化とカウントを行うのはかなり簡単です

SELECT
   s.id,
   s.catid,
   COUNT(c.id)
FROM 
   tblMembers s
   LEFT JOIN tblClients  c
   ON s.id = c.staffid
WHERE
   s.catid = @catID
GROUP BY 
  s.id,
  s.catid
ORDER BY 
    COUNT(c.id) desc   

ただし、1つのトリッキーなビットは

表示しないのではなく、0 の結果を表示します。

これを行うには、一致するレコードがない場合でも表示されるように左結合を実行する必要があり、結合の右側のテーブルのフィールドをカウントする必要があります。そうしないと、カウントが 1 になります

デモ

于 2012-10-16T15:28:00.820 に答える
2

これを試して:

SELECT m.Id 'Member Id', ISNULL(c.StaffCount, 0) 'StuffCount'
FROM tblMembers m
LEFT JOIN
(
    SELECT staffId, COUNT(staffId) 'StaffCount'
    FROM tblClients
    GROUP BY staffId
) c ON m.Id = c.staffId
WHERE m.Cat = 'Some Id'
ORDER BY StuffCount
于 2012-10-16T15:27:16.327 に答える
1

あなたのケースを正しく理解できたことを願っています。
次のようなことを試してください:

SELECT T1.ID, 
       Count(*) 
FROM   MEMBERS T1 
       INNER JOIN CLIENTS T2 
               ON T1.ID = T2.STAFFID 
WHERE  T1.CATID = 2 
GROUP  BY T1.ID 
UNION 
SELECT DISTINCT ID, 
                0 
FROM   MEMBERS 
WHERE  CATID != 2 

実際のサンプルはこちらから入手できます。

于 2012-10-16T15:30:34.183 に答える
1

試す:

select tblMembers.id, count(tblClient.id)
from tblMembers left join tblCLient on staffId = tblMembers.id
where tblMembers.catId = ??
group by tblMembers.id
order by 2 desc
于 2012-10-16T15:31:12.127 に答える