我已经研究演示如何添加条件使用CASE语句计数语句,但我找不到怎么做,我需要一个例子很多问题#1。假设我有以下表格:计数行基于存在的条件
CREATE TABLE [Project](
[ProjectId] [int] NOT NULL,
[ProjectName] [nvarchar](100) NOT NULL
)
GO
CREATE TABLE [ProjectTask](
[ProjectTaskId] [int] NOT NULL,
[ProjectId] [int] NOT NULL,
[TaskName] [nvarchar](100) NOT NULL
)
GO
CREATE TABLE [ProjectTaskOwner](
[ProjectTaskId] [int] NOT NULL,
[UserId] [int] NOT NULL
)
GO
CREATE TABLE [ProjectTaskEntity](
[ProjectTaskId] [int] NOT NULL,
[EntityId] [int] NOT NULL,
[AssignedUserId] [int]
)
GO
INSERT Project (ProjectId, ProjectName) VALUES (1, 'Test Project')
INSERT ProjectTask (ProjectTaskId, ProjectId, TaskName) VALUES(1, 1, 'Task1')
INSERT ProjectTask (ProjectTaskId, ProjectId, TaskName) VALUES(2, 1, 'Task2')
INSERT ProjectTaskOwner (ProjectTaskId, UserId) VALUES (1, 1)
INSERT ProjectTaskOwner (ProjectTaskId, UserId) VALUES (1, 2)
INSERT ProjectTaskOwner (ProjectTaskId, UserId) VALUES (1, 3)
INSERT ProjectTaskEntity (ProjectTaskId, EntityId, AssignedUserId) VALUES (1, 1, 1)
INSERT ProjectTaskEntity (ProjectTaskId, EntityId, AssignedUserId) VALUES (1, 2, 2)
INSERT ProjectTaskEntity (ProjectTaskId, EntityId, AssignedUserId) VALUES (1, 3, 3)
INSERT ProjectTaskEntity (ProjectTaskId, EntityId, AssignedUserId) VALUES (1, 4, 256)
我想要做的就是让每个项目任务分配给我,并分配给其他任务所有者的实体的数量。因此,对于上面的测试数据,鉴于1的用户ID和1项目ID我想到:
| TaskId | AssignedToMe | AssignedToOthers |
| 1 | 1 | 2 |
| 2 | 0 | 0 |
所以这是我到目前为止有:
DECLARE @userId INT = 1
SELECT
pt.ProjectId,
pt.ProjectTaskId,
COUNT(CASE WHEN pte.AssignedUserId = @userId THEN 1 ELSE NULL END) AS AssignedTo
FROM ProjectTask pt
INNER JOIN Project p
ON p.ProjectId = pt.ProjectId
LEFT JOIN ProjectTaskEntity pte
ON pte.ProjectTaskId = pt.ProjectTaskId
WHERE p.ProjectId = 1
GROUP BY pt.ProjectId, pt.ProjectTaskId
分配给我的是容易。问题是我不知道如何去做别人,因为别人不只是我不是。任何人都不在此任务的ProjectTaskOwner表中。任何人有任何想法如何实现这一目标?
感谢您的评论,但你忽略了一点关于它没有比我其他的只是用户,但其他用户也分配给该作为业主的任务。 –