-1

我正在尝试编写一个查询,其中两个不同的 UID 需要分别查找两者的资源名称。

换句话说,对于每个任务,都分配有资源和一个状态管理器。这在 SQ1 中转换为分配,对资源是唯一的,但具有相同的状态管理器。但是,在数据库中的任何地方都无法看到给定分配的状态管理器名称。

该分配确实有“TaskStatusManagerUID”可用。状态管理器的名称可以通过将其绑定回 MSP_EPMResource 表来确定,其中 TaskStatusManagerUID = ResourceUID。

问题是,对于我的报告,我需要能够查看 ResourceUIDTaskstatusManagerUID 并确定同一分配中每个的名称。

虽然我已经成功地连接以显示其中一个或另一个的名称,但我无法确定如何同时显示 Resource 和 TaskStatusManager 的名称。

这是我要显示的示例(为便于阅读添加了括号):

(AssignmentUID) (任务名称) (资源名称) (任务状态管理器名称)

请参阅下面的更多信息:

在此处输入图像描述

这是我一直在使用的代码,但没有成功:

Select top 100
c.[assignmentuid], 
a.[taskname], 
c.[resourceuid],
b.[resourcename], 
a.[taskstatusmanageruid],
d.[StatusManager]

from [PRJPROD_ProjectWebApp].[dbo].[MSP_EpmAssignment] c
join [PRJPROD_ProjectWebApp].[dbo].[MSP_EpmTask_UserView] a
on a.[TaskUID] = c.[TaskUID]
join [PRJPROD_ProjectWebApp].[dbo].[MSP_EpmResource] b
on b.[ResourceUID] = c.[ResourceUID]

join (select b.resourcename StatusManager
from [PRJPROD_ProjectWebApp].[dbo].[MSP_EpmResource] b) d 
on d.[StatusManager] = a.[taskstatusmanageruid] 

group by 
c.[assignmentuid], 
a.[taskname], 
c.[resourceuid],
b.[resourcename], 
a.[taskstatusmanageruid],
d.[StatusManager]

目前,我收到“从字符串转换为唯一标识符时转换失败。”

4

2 回答 2

0

多亏了 Jeff Beese 额外的一双眼睛,这足以让我把最后一块做好!

Select top 100
c.[assignmentuid], 
a.[taskname], 
c.[resourceuid],
b.[resourcename], 
a.[taskstatusmanageruid],
d.[StatusManager]

from [PRJPROD_ProjectWebApp].[dbo].[MSP_EpmAssignment] c
join [PRJPROD_ProjectWebApp].[dbo].[MSP_EpmTask_UserView] a
on a.[TaskUID] = c.[TaskUID]
join [PRJPROD_ProjectWebApp].[dbo].[MSP_EpmResource] b
on b.[ResourceUID] = c.[ResourceUID]

join (select b.resourcename as StatusManager, 
             b.ResourceUID 
from [PRJPROD_ProjectWebApp].[dbo].[MSP_EpmResource] b) d 
on d.[resourceuid] = a.[taskstatusmanageruid]


group by 
c.[assignmentuid], 
a.[taskname], 
c.[resourceuid],
b.[resourcename], 
a.[taskstatusmanageruid],
d.[StatusManager]
于 2015-03-26T17:36:52.390 回答
0

在您的加入中,您有on a.[TaskUID] = c.[TaskUID]on b.[ResourceUID] = c.[ResourceUID]on d.[StatusManager] = a.[taskstatusmanageruid],其中,我假设最后一个导致您出现问题。试试吧

join (select b.resourcename StatusManager
from [PRJPROD_ProjectWebApp].[dbo].[MSP_EpmResource] b) d 
on d.[StatusManager] = CONVERT(CHAR, a.[taskstatusmanageruid])

这会将其中包含的 GUID 转换taskstatusmanageruid为 char 字符串,使其能够成功比较。

您也可以转换值,而不是转换值CAST(a.[taskstatusmanageruid] AS CHAR

编辑

由于 GUID 的性质,您可能无法将其转换/转换为 char 值,在这种情况下,您需要将两个字段转换/转换为 varchar 或 nvarchar:

join (select b.resourcename StatusManager
from [PRJPROD_ProjectWebApp].[dbo].[MSP_EpmResource] b) d 
on CONVERT([N]VARCHAR, d.[StatusManager]) = CONVERT([N]VARCHAR, a.[taskstatusmanageruid])

或者

join (select b.resourcename StatusManager
from [PRJPROD_ProjectWebApp].[dbo].[MSP_EpmResource] b) d 
on CAST(d.[StatusManager] AS [N]VARCHAR) = CAST( a.[taskstatusmanageruid] AS [N]VARCHAR)
于 2015-03-26T15:37:14.060 回答