У меня есть запрос, содержащий подзапрос, который использует результат временной таблицы в операторе WHERE подзапроса. Однако это не возвращает ожидаемых результатов. По сути, существует таблица EXT_Workpackage, которая содержит значения для EXT_Workpackage_ID (первичный ключ) и Parent_Workpackage_ID. Я использую Parent_Workpackage_ID для возврата Workpackage_Code родительского элемента (с рабочими пакетами может быть связано несколько рабочих пакетов).
Я скопирую код ниже:
USE DeltekPIMQA
select
pa.EXT_Workpackage_ID,
pa.Parent_Workpackage_ID [Parent_Workpackage_ID],
SUM(CONVERT(DECIMAL(18,2),CONVERT(decimal(18,2),ISNULL(h.Hours,0))/60)) [hrs]
INTO #tempactualhoursb
FROM
EXT_Workpackage wp
LEFT JOIN exvw_tmshours h on wp.Workpackage_Code=h.wp collate SQL_Latin1_General_CP1_CI_AS
LEFT JOIN EXT_Workpackage pa on wp.Parent_Workpackage_ID=pa.EXT_Workpackage_ID
WHERE wp.Project_ID=868
and pa.Workpackage_Code is not null
Group by pa.EXT_Workpackage_ID,pa.Workpackage_Code, pa.Parent_Workpackage_ID
ORDER BY pa.Workpackage_Code
select
wp.EXT_Workpackage_ID,
wp.Workpackage_Code [Code],
RIGHT(wp.Workpackage_Code,3) [job],
wp.name [Name],
wp.Parent_Workpackage_ID [Parent_Workpackage_ID],
wps.name [Status],
wps.name [@stato],
wpc.name [ContractType],
wpt.name [LeadTrade],
--PWC.Workpackage_Code,
CASE
WHEN WPS.ext_workpackage_status_id not in (3,13) THEN ISNULL(wp.Duration,0)
ELSE 0
END
[SalesBudget],
--ISNULL(wp.Duration,0) [SalesBudget],
ISNULL(tah.hrs,0)- ISNULL(wp.Duration,0) [PerformanceVsSales],
CAST(ISNULL(CONVERT(INT,(tah.hrs- wp.Duration)/NULLIF(wp.duration,0)*100),0) as varchar(16)) + '%' [Percent],
(SELECT ISNULL(sum(ch.duration),0) from EXT_Workpackage ch where ch.Parent_Workpackage_ID=wp.ext_workpackage_id and ch.ext_workpackage_status_id not in (3,13)) [PWP_Planned],
ISNULL(tah.hrs,0) [ActualHours],
(select CONVERT(varchar,count(*)) from EXT_Workpackage wx where wx.Parent_Workpackage_ID=wp.ext_workpackage_id and wx.EXT_Workpackage_Status_ID in (2)) [WPLive],
(select CONVERT(varchar,count(*)) from EXT_Workpackage wx where wx.Parent_Workpackage_ID=wp.ext_workpackage_id and wx.EXT_Workpackage_Status_ID in (1,2,5,7,8,12)) + ' / ' +
(select CONVERT(varchar,count(*)) from EXT_Workpackage wx where wx.Parent_Workpackage_ID=wp.ext_workpackage_id and wx.EXT_Workpackage_Status_ID in (2)) [WPsCountLive],
(SELECT ISNULL(sum(ch.Material_Cost),0) from EXT_Workpackage ch where ch.Parent_Workpackage_ID=wp.ext_workpackage_id) [PlannedChildMaterials],
ISNULL(wp.Material_Cost,0) [PlannedMaterials],
(SELECT TOP 1 Workpackage_Code FROM EXT_Workpackage WHERE Parent_Workpackage_ID = tah.Parent_Workpackage_ID AND Parent_Workpackage_ID IS NOT NULL) [Parent_Workpackage_Code],
CASE
WHEN wps.completed=1 THEN 1
WHEN wps.completed = 0 THEN 0
END [workpackage/@iscomplete]
--(SELECT TOP 1 Workpackage_Code FROM EXT_Workpackage WHERE EXT_Workpackage_ID = wp.Parent_Workpackage_ID) AS [Parent_Workpackage_Code]
from EXT_Workpackage AS wp
LEFT JOIN Project p on wp.Project_ID=p.Project_ID
LEFT JOIN EXT_Workpackage_Status wps on wp.EXT_Workpackage_Status_ID=wps.EXT_Workpackage_Status_ID
LEFT JOIN EXT_Workpackage_Contract_Type wpc on wp.EXT_Workpackage_Contract_Type_ID=wpc.EXT_Workpackage_Contract_Type_ID
LEFT JOIN EXT_Workpackage_Type wpt on wp.EXT_Workpackage_Type_ID=wpt.EXT_Workpackage_Type_ID
LEFT JOIN #tempactualhoursb tah on wp.EXT_Workpackage_ID=tah.ext_workpackage_id
LEFT JOIN EXT_Workpackage_Billing_Type b on wp.Billing=b.EXT_Workpackage_Billing_Type_ID
--CROSS APPLY [dbo].[EXT_FN_Parent_Workpackage_Code] (#tempactualhoursb.Parent_Workpackage_ID) PWC ON wp.EXT_Workpackage_ID = PWC.EXT_Workpackage_ID
where wp.Project_ID=868
--AND Parent_Workpackage_Code IS NOT NULL
order by wp.Workpackage_Code