我正在尝试编写一个查询,其中两个不同的UID需要为两者分别查找资源名称。
换句话说,对于每个任务,分配了资源和一个状态管理器。这会将SQl转换为Assignment,对于资源是唯一的,但具有相同的状态管理器。但是,数据库中的任何位置都无法在给定的分配上看到状态管理器的名称。
作业确实有" TaskStatusManagerUID"可用。状态管理器的名称可以通过将其绑定回MSP_EPMResource表来确定,其中TaskStatusManagerUID = ResourceUID。
对于我的报告,问题是,我需要能够查看ResourceUID 和 TaskstatusManagerUID并确定每个在同一作业上的名称。
虽然我已成功使用联接来显示其中一个名称,但我无法确定如何显示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]
目前,我正在接受#34;从字符串转换为uniqueidentifier时转换失败。"
答案 0 :(得分: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])
这会将taskstatusmanageruid
中包含的GUID转换为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])
OR
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)
答案 1 :(得分:0)
感谢Jeff Beese额外的一双眼睛,这对我来说已经足够了![/ p>
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]