【发布时间】:2021-02-21 09:46:26
【问题描述】:
我有包含可用和分配信息的 SQL Server 数据,我需要显示每个资源的可用数据、分配数据和余额数据等报告。
现在我在单行中拥有所有信息,并且需要计算余额数据。如何检索预期数据?
当前数据和输出
可用
+---+-------------+------------+---------------------+---------+------------+------------+
| Id| ResourceName| EmployeeId | iGPMResourceGroupId | GroupId | Capacity01 | Capacity02 |
+---+-------------+------------+---------------------+---------+------------+------------+
| 1 | Palanisamy | 24 | 1025135 | 15 | 0.70 | 0.70 |
| 2 | Anil | 20 | 1018707 | 15 | 1.00 | 1.00 |
| 3 | Ravi | 18 | 1025136 | 15 | 0.50 | 0.50 |
| 4 | Manikumar | 9 | 1025164 | 29 | 1.00 | 1.00 |
| 5 | Sakathi | 11 | 1020687 | 29 | 1.00 | 1.00 |
+---+-------------+------------+---------------------+---------+------------+------------+
需求
+------------+-------------+---------------------+
| Number | ProjectName | iGPMResourceGroupId |
+------------+-------------+---------------------+
| BM-00000001| Project 1 | 1020687 |
| BM-00000002| Project 2 | 1020687 |
| BM-00000002| Project 2 | 1025136 |
| BM-00000003| Project 3 | 1025164 |
| BM-00000002| Project 2 | 1025135 |
| BM-00000003| Project 3 | 1025135 |
| BM-00000003| Project 3 | 1020687 |
| BM-00000002| Project 2 | 1025164 |
+------------+-------------+---------------------+
已分配
+----+---------------------+----------------+------------+---------------------+------------+-----------+-----------+
| Id | AvailableResourceId | AssociateName | EmployeeId | iGPMResourceGroupId | ProjectId | Staffed01 | Staffed02 |
+----+---------------------+----------------+------------+---------------------+------------+-----------+-----------+
| 1 | 5 | Sakathi | 11 | 1020687 | BM-00000001| 0.30 | 0.30 |
| 2 | 5 | Sakathi | 11 | 1020687 | BM-00000003| 0.30 | 0.30 |
| 3 | 3 | Ravi | 18 | 1025136 | BM-00000002| 0.50 | 0.50 |
+----+---------------------+----------------+------------+---------------------+------------+-----------+-----------+
查询
SELECT ResourceName, iGPMResourceGroupId, ProjectName, StaffedId, Capacity01, Capacity02, Staffed01, Staffed02
FROM
(
SELECT Distinct A. ResourceName, A.EmployeeId, A.[iGPMResourceGroupId], D.[ProjectName], S.[Id] AS StaffedId, A.[Capacity01], A.[Capacity02], S.[Staffed01], S.[Staffed02]
FROM [AvailableR] A JOIN [DemandR] D ON A.[iGPMResourceGroupId] = D.[iGPMResourceGroupId]
LEFT JOIN [dbo].[AllocatedR] S ON A.Id = S.[AvailableResourceId] AND S.Number = D.Number AND S.[iGPMResourceGroupId] = D.[iGPMResourceGroupId]
)X
ORDER BY EmployeeId
输出
+--------------+---------------------+-------------+-----------+------------+------------+-----------+-----------+
| ResourceName | iGPMResourceGroupId | ProjectName | StaffedId | Capacity01 | Capacity02 | Staffed01 | Staffed02 |
+--------------+---------------------+-------------+-----------+------------+------------+-----------+-----------+
| Sakathi | 1020687 | Project 1 | 1 | 1 | 1 | 0 | 0 |
| Sakathi | 1020687 | Project 2 | (null) | 1 | 1 | (null) | (null) |
| Sakathi | 1020687 | Project 3 | 2 | 1 | 1 | 0 | 0 |
| Ravi | 1025136 | Project 2 | 3 | 0 | 0 | 1 | 1 |
| Palanisamy | 1025135 | Project 2 | (null) | 1 | 1 | (null) | (null) |
| Palanisamy | 1025135 | Project 3 | (null) | 1 | 1 | (null) | (null) |
| Manikumar | 1025164 | Project 2 | (null) | 1 | 1 | (null) | (null) |
| Manikumar | 1025164 | Project 3 | (null) | 1 | 1 | (null) | (null) |
+--------------+---------------------+-------------+-----------+------------+------------+-----------+-----------+
预期输出:
左 = 可用 - 总和(已分配)
+--------------+---------------------+-------------+-----------+------------+------+------+
| ResourceName | iGPMResourceGroupId | ProjectName | Status | StaffedId | 01 | 02 |
+--------------+---------------------+-------------+-----------+------------+------+------+
| Sakathi | | | Available | (null) | 1 | 1 |
| Sakathi | 1020687 | Project 1 | Alloted | 1 | 0.30 | 0.30 |
| Sakathi | 1020687 | Project 2 | Alloted | (null) |(null)|(null)|
| Sakathi | 1020687 | Project 3 | Alloted | 2 | 0.30 | 0.30 |
| Sakathi | | | Left | (null) | 0.40 | 0.40 |
| Ravi | | | Available | (null) | 0.50 | 0.50 |
| Ravi | 1025136 | Project 2 | Alloted | 3 | 0.50 | 0.50 |
| Ravi | | | Left | (null) | 0 | 0 |
| Palanisamy | | | Available | (null) | 1 | 1 |
| Palanisamy | 1025135 | Project 2 | Alloted | (null) |(null)|(null)|
| Palanisamy | 1025135 | Project 3 | Alloted | (null) |(null)|(null)|
| Palanisamy | | | Left | (null) | 1 | 1 |
| Manikumar | | | Available | (null) | 1 | 1 |
| Manikumar | 1025164 | Project 2 | Alloted | (null) |(null)|(null)|
| Manikumar | 1025164 | Project 3 | Alloted | (null) |(null)|(null)|
| Manikumar | | | Left | (null) | 1 | 1 |
+--------------+---------------------+-------------+-----------+------------+------+------+
【问题讨论】:
标签: sql sql-server pivot common-table-expression unpivot