-1

2 つの異なる UID が両方のリソース名を検索する必要があるクエリを作成しようとしていますが、別々です。

つまり、タスクごとに、割り当てられたリソースと 1 つのステータス マネージャーがあります。これは、SQl でリソースに固有の割り当てに変換されますが、ステータス マネージャーは同じです。ただし、データベースのどこにも、特定の割り当てに関する進捗管理者の名前が表示されません。

割り当てには、利用可能な「TaskStatusManagerUID」があります。ステータス マネージャの名前は、TaskStatusManagerUID = ResourceUID である MSP_EPMResource テーブルに関連付けることによって決定できます。

問題は、私のレポートでは、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]

現在、「文字列からuniqueidentifierへの変換中に変換に失敗しました」というメッセージが表示されます。

4

2 に答える 2

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 がtaskstatusmanageruidchar 文字列に変換され、正常に比較できるようになります。

値を変換する代わりに、値をキャストすることもできます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 に答える
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 に答える