我很难弄清楚如何实现这一目标。我知道如何用 C# 实现它,但不知道如何用 SQL 实现。
假设我有下表:
| ID | 姓名 | 路由ID |
|---|---|---|
| 1 | 鲍勃 | 1001 |
| 2 | 鲍勃 | 1002 |
| 3 | 安娜 | 1001 |
| 4 | 吉姆 | 1001 |
| 5 | 伊莱 | 1001 |
我想返回整个表,并用一个额外的列显示routeID按名称出现的总次数,所以where name='Bob'看起来像:
| ID | 姓名 | 路由ID | 全部的 |
|---|---|---|---|
| 1 | 鲍勃 | 1001 | 4 |
| 2 | 鲍勃 | 1002 | 1 |
但是,如果我写类似的东西
declare @ct as nvarchar(5)
set @ct = (SELECT COUNT(RouteId) from <table>)
select *, @ct
from <table>
where name = 'Bob'
Run Code Online (Sandbox Code Playgroud)
我得到所有路线 ID 的总数,而不仅仅是行中显示的路线 ID。
我尝试查看计算列,但据我所知它不支持这种类型的查询。
有人能指出我正确的方向吗?
我在这里似乎有类似的问题,但似乎没有一个答案符合我正在寻找的-
假设我有一张这样的桌子:
| 分配给 | 部门ID | 类型 |
|---|---|---|
| 玛丽 | 5001 | 初级 |
| 鲍勃 | 5002 | 中间 |
| 鲍勃 | 5003 | 初级 |
| 吉尔 | 5004 | 高的 |
| 鲍勃 | 5005 | 高的 |
| 鲍勃 | 5006 | 高的 |
另一个像这样:
| 用户 | 电话 | 地址 |
|---|---|---|
| 玛丽 | 111-222-3333 | 南巷111号 |
| 鲍勃 | 222-111-3333 | 北大道222号 |
| 吉尔 | 333-222-1111 | 555公路 |
我想在第一个表上输出带有左连接的第二个表,其中包含每个指定用户的“类型”总数(基本、中、高),因此它需要类似的内容:
| 用户 | 电话 | 小学总计 | 总中 | 总高 |
|---|---|---|---|---|
| 玛丽 | 111-222-3333 | 1 | 0 | 0 |
| 鲍勃 | 222-111-3333 | 1 | 1 | 2 |
| 吉尔 | 333-222-1111 | 0 | 0 | 1 |
我已经尝试过--Count(case when <table>.[type] = 'Elementary' then 1 else 0 end) AS ElementaryCount,,但这只是让我获得整个表,而不是左连接的用户。
有人知道我该怎么做吗?