Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL Server中将结果集动态选择为多行_Sql_Sql Server_Pivot_Common Table Expression_Unpivot - Fatal编程技术网

在SQL Server中将结果集动态选择为多行

在SQL Server中将结果集动态选择为多行,sql,sql-server,pivot,common-table-expression,unpivot,Sql,Sql Server,Pivot,Common Table Expression,Unpivot,我有SQL Server数据,其中包含可用和已分配的信息,我需要显示报告,如可用数据、已分配数据和每个资源的平衡数据 现在我有单行的所有信息,需要计算余额数据。如何检索预期的数据 当前数据和输出 +--------------+---------------------+-------------+-----------+------------+------------+-----------+-----------+ | ResourceName | iGPMResourceGroupId

我有SQL Server数据,其中包含可用和已分配的信息,我需要显示报告,如可用数据、已分配数据和每个资源的平衡数据

现在我有单行的所有信息,需要计算余额数据。如何检索预期的数据

当前数据和输出

+--------------+---------------------+-------------+-----------+------------+------------+-----------+-----------+
| 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) |
+--------------+---------------------+-------------+-----------+------------+------------+-----------+-----------+

可用

   +---+-------------+------------+---------------------+---------+------------+------------+
   | 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     |
  +----+---------------------+----------------+------------+---------------------+------------+-----------+-----------+
已分配

   +------------+-------------+---------------------+
   | 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) |
+--------------+---------------------+-------------+-----------+------------+------------+-----------+-----------+
预期输出:

=可用-总和(已分配)


所以,如果我答对了,您需要一个附加列“Left”和计算结果,以及一个新的列来存储每个资源的值?我想您可以通过重新设计查询并使用两个子查询来实现这一点:

WITH cte AS(
    SELECT Distinct A. ResourceName, A.EmployeeId, A.[iGPMResourceGroupId], NULL AS [ProjectName], N'Available' AS Status, NULL AS StaffedId,  A.[Capacity01], A.[Capacity02], NULL AS [Staffed01], NULL AS [Staffed02]         
    FROM [AvailableR] A
    JOIN [DemandR] D ON A.[iGPMResourceGroupId] = D.[iGPMResourceGroupId]
    UNION ALL
    SELECT Distinct A. ResourceName, A.EmployeeId, A.[iGPMResourceGroupId], D.[ProjectName], N'Alloted' AS Status, 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]          
),
cteLeft AS(
SELECT ResourceName, EmployeeID, iGPMResourceGroupId, SUM([Capacity01] + [Capacity02]) - SUM(Staffed01 + Staffed02) AS LeftTotal
  FROM cte
  WHERE Status = N'Alloted'
  GROUP BY ResourceName, EmployeeID, iGPMResourceGroupId
)
SELECT *, NULL AS [Left] 
  FROM cte
UNION ALL
SELECT Distinct ResourceName, EmployeeId, [iGPMResourceGroupId], NULL AS [ProjectName], N'Left' AS Status, NULL AS StaffedId, NULL AS [Capacity01], NULL AS [Capacity02], NULL AS [Staffed01], NULL AS [Staffed02], [LeftTotal] AS [Left]           
  FROM cteLeft
  ORDER BY 1

查看fiddle了解详细信息:

是的,你说得对,但资源Anil不应该来,因为他没有任何需求。当然,我已将需求连接添加到查询中-现在Anil已从结果中筛选出来。我也更新了fiddle,但这不是预期的结果,我只是修改了我的查询(还没有更新答案),但在这样做的时候,我想知道:在您的预期结果(问题中)中,Manicumar被分配到两个项目中,但考虑到您的示例fiddle,Manikumar根本没有分配-所以,小提琴有毛病是不是达到了预期的效果?这是我最新的小提琴: