在 SQL Tables 中的 1 个唯一分配中使用相同的 Table 查找两个显示名称
Lookup two Display Names using the same Table on 1 unique assignment in SQL Tables
我正在尝试编写一个查询,其中两个不同的 UID 需要分别为两者查找资源名称。
换句话说,对于每个任务,分配有资源和一个状态管理器。这会在 SQl 中转换为资源唯一的分配,但具有相同的状态管理器。但是,在数据库中的任何地方都看不到给定分配的状态经理姓名。
作业确实有 "TaskStatusManagerUID" 可用。状态管理器的名称可以通过将其绑定回 MSP_EPMResource table 来确定,其中 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]
目前,我得到 "Conversion failed when converting from a character string to uniqueidentifier."
在您的联接中,您有 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 的性质,您可能无法将其 convert/cast 转换为 char 值,在这种情况下,您需要将两个字段 convert/cast 转换为 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)
多亏了 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]
我正在尝试编写一个查询,其中两个不同的 UID 需要分别为两者查找资源名称。
换句话说,对于每个任务,分配有资源和一个状态管理器。这会在 SQl 中转换为资源唯一的分配,但具有相同的状态管理器。但是,在数据库中的任何地方都看不到给定分配的状态经理姓名。
作业确实有 "TaskStatusManagerUID" 可用。状态管理器的名称可以通过将其绑定回 MSP_EPMResource table 来确定,其中 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]
目前,我得到 "Conversion failed when converting from a character string to uniqueidentifier."
在您的联接中,您有 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 的性质,您可能无法将其 convert/cast 转换为 char 值,在这种情况下,您需要将两个字段 convert/cast 转换为 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)
多亏了 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]