0
我想合併2個獨立工作並且理想情況下優化查詢的查詢。第一個查詢返回各種合同信息,最後一個變量'@InYearMonths'確定總月數在本財政年度報告。SSMS 2008合併2個查詢
第一個查詢是:
Declare @ReportID int, @OrgId nvarchar(10), @FYStartDate DATETIME, @InYearMonths INT
Select @ReportID = '58', @OrgId = '%', @FYStartDate = '2013-04-01', @InYearMonths = '12'
SELECT Categories.Category, Contracts.ContractName, ContractUptakeStatus.Description AS UptakeStatus, ContractUptakeStatus.RAGCode AS UptakeRAG,
ContractBenefitActuals.ActualValueCR, ContractBenefitActuals.ActualValueCA, ContractSharing.SavingsStartDate, ContractBenefitOpportunity.AnnualSpend,
ContractBenefitOpportunity.AnnualisedOppCR, ContractBenefitOpportunity.AnnualisedOppCA, ContractBenefitOpportunity.CurrentFYCR,
ContractBenefitOpportunity.CurrentFYCA, ContractBenefitOpportunity.NextFYCR, ContractBenefitOpportunity.NextFYCA, Categories.CategoryColour,
ContractSharing.OrgID, Organisations.Organisation, ContractBenefitReporting.Year, ContractBenefitReporting.Period, ContractBenefitReporting.Version,
Categories.CategoryForeColour, Contracts.StartDate, Contracts.EndDate, ContractBenefitActuals.ActualSpend,
CASE WHEN SavingsStartDate IS NOT NULL THEN CASE WHEN
DateDiff(MM, SavingsStartDate, CAST('01/04/' + CAST([Year] - 1 AS NVARCHAR(10)) AS datetime)) between -12 and 0
THEN(SELECT ISNULL(SUM(ActualValueCR),0) as InYearCRSavings
FROM
(SELECT ROW_NUMBER() OVER (PARTITION BY ContractBenefitActualsDetail.ActualDetailID
ORDER BY ContractBenefitActualsDetail.Period DESC) AS InYearPeriod, *
FROM ContractBenefitActualsDetail
) AS InYearValue
WHERE InYearValue.ActualsID = contractBenefitActuals.actualsid
AND InYearValue.Period <= @InYearMonths) ELSE 0 END ELSE 0 END AS InYearCR,
ContractUptakeStatus.UptakeStatusID
FROM ContractBenefitReporting INNER JOIN
ContractBenefitReporting_SharesInReport ON ContractBenefitReporting.ReportID = ContractBenefitReporting_SharesInReport.ReportID INNER JOIN
ContractSharing ON ContractBenefitReporting_SharesInReport.ShareID = ContractSharing.ShareID INNER JOIN
Contracts ON ContractSharing.ContractID = Contracts.ContractID INNER JOIN
Categories ON Contracts.CategoryID = Categories.CategoryID INNER JOIN
ContractUptakeStatus ON ContractSharing.UptakeStatusID = ContractUptakeStatus.UptakeStatusID INNER JOIN
Organisations ON ContractSharing.OrgID = Organisations.OrgID LEFT OUTER JOIN
ContractBenefitOpportunity ON ContractSharing.ShareID = ContractBenefitOpportunity.ShareID AND
ContractBenefitReporting_SharesInReport.BenefitVersion = ContractBenefitOpportunity.Version AND
ContractBenefitReporting.Year = ContractBenefitOpportunity.FiscalYear AND ContractBenefitReporting.Period = ContractBenefitOpportunity.Period LEFT OUTER JOIN
ContractBenefitActuals ON ContractSharing.ShareID = ContractBenefitActuals.ShareID AND
ContractBenefitReporting_SharesInReport.BenefitVersion = ContractBenefitActuals.Version AND
ContractBenefitReporting.Year = ContractBenefitActuals.FiscalYear AND ContractBenefitReporting.Period = ContractBenefitActuals.Period
WHERE (ContractBenefitReporting.ReportID = @ReportID) AND (Organisations.Organisation LIKE @OrgID)
第二個查詢被用來確定變量「@InYearMonths」:
Declare @FYStartdate datetime, @Reportid int
Select @FYStartdate = '2013-04-01', @Reportid = '58'
SELECT ISNULL(DATEDIFF(MM, dbo.ContractSharing.SavingsStartDate, @FYStartDate), 0) AS InYearMonths
FROM dbo.ContractBenefitReporting_SharesInReport INNER JOIN
dbo.ContractBenefitActuals ON dbo.ContractBenefitReporting_SharesInReport.BenefitVersion = dbo.ContractBenefitActuals.Version AND
dbo.ContractBenefitReporting_SharesInReport.ShareID = dbo.ContractBenefitActuals.ShareID INNER JOIN
dbo.ContractBenefitReporting ON dbo.ContractBenefitReporting_SharesInReport.ReportID = dbo.ContractBenefitReporting.ReportID AND
dbo.ContractBenefitActuals.FiscalYear = dbo.ContractBenefitReporting.Year AND
dbo.ContractBenefitActuals.Period = dbo.ContractBenefitReporting.Period INNER JOIN
dbo.ContractSharing ON dbo.ContractBenefitReporting_SharesInReport.ShareID = dbo.ContractSharing.ShareID
WHERE (dbo.ContractBenefitReporting_SharesInReport.ReportID = @Reportid)
我需要內的動態計算這個「@InYearMonths」變量第一個查詢 - 有沒有人有任何建議?