0

我正在嘗試更新SSRS中的報表。該查詢由另一位同事使用存儲過程構建,該存儲過程已離開該項目並且無法再聯繫。 他爲所有批次使用了內存中的表格,以便添加一些聚合。內存表多個INNER JOIN

爲輸出的列有:

  • BatchID
  • TransformDate
  • SourceSystem
  • CompanyType
  • MAX(B.FooterLines)AS FooterTotalLines
  • MAX(SRC.TotalLines)AS SourceTotalLines
  • MAX(BalancingLinesTable.Balancing線)AS BalancingLines
  • SUM(STG.TotalLines)AS StagingTotalLines
  • (CAST(STG.Company爲INT)* 1000000)+ B.BatchID AS企業編碼

但是我需要添加一個額外的列稱爲平衡線。我開發了它的查詢和它的工作原理:

SELECT COUNT(0) as "Balancing lines" 
FROM [Source].[Staging].[TransactionLine] T 
INNER JOIN 
[Source].[Staging].HeaderLine H 
ON T.HeaderID = H.HeaderID 
where H.BatchID = 1234* and H.SourceSystemInstance = 'ABC' and AccountNumber = '98765' 
*1234 should be variable -> B.BatchID and also the SourseSystemInstance 'ABC'->  B.SourceSystem 

但是,我的同事寫的存儲過程仍然是我的外國人。你知道如何將我的工作查詢添加到他的工作存儲過程嗎?

爲了清楚起見使用的表:

  • @batches乙
  • HeaderLineħ
  • FooterLine FL
  • 'INNER JOIN表' BalancingLinesTable
  • 'INNER JOIN表' SRC
  • 'LEFT JOIN table'STG

存儲過程:

USE [Source] 

ALTER PROCEDURE [dbo].[usp_GetSomeCounts] (
@StartAt datetime 
) 
AS BEGIN 
SET NOCOUNT ON; 

-- Set a default for start date if none is specified 
SELECT @StartAt = ISNULL(@StartAt, DATEADD(dd, -7, GETDATE())) 

-- Use an in-memory table for all batches for the specified period 
DECLARE @batches TABLE(BatchID int, TransformDate datetime, HeaderID nvarchar(36), CompanyType nvarchar(30), SourceSystem nvarchar(4), FooterLines int) 

-- Fill in-memory table batches 
INSERT INTO @batches (
    BatchID 
    ,TransformDate 
    ,HeaderID 
    ,CompanyType 
    ,SourceSystem 
    ,FooterLines 
) 
    SELECT 
     H.BatchID 
     ,H.TransformDate 
     ,H.HeaderID 
     ,CompanyTypeID 
     ,H.SourceSystemInstance 
     ,ISNULL(FL.TotalTransactionLines, 0) 
    FROM 
     Staging.HeaderLine H WITH (NOLOCK) 
    INNER JOIN 
     Staging.FooterLine FL WITH (NOLOCK) 
    ON 
     H.HeaderID = FL.HeaderID 
    WHERE 
     H.BatchDate >= @StartAt 
    ORDER BY 
     H.BatchID 

/* Using in-memory table 'batches', count all valid transactions in both Source and Staging 
    databases. Include the footer totals */ 
SELECT 
     B.BatchID 
    , B.TransformDate 
    , B.SourceSystem 
    , B.CompanyType 
    , MAX(B.FooterLines) AS FooterTotalLines 
    , MAX(SRC.TotalLines) AS SourceTotalLines 
    , MAX(BalancingLinesTable.BalancingLines) AS BalancingLines 
    , SUM(STG.TotalLines) AS StagingTotalLines 
    , (CAST(STG.Company AS int) * 1000000) + B.BatchID AS CompanyCode 
FROM 
    @batches B 

INNER JOIN (
    SELECT 
     B.BatchID 
     ,B.HeaderID 
     ,COUNT(0) as BalancingLines 
    FROM 
    @batches B 

-- this 'inner join table' BalancingLinesTable is what I added 
    INNER JOIN 
     Staging.TransactionLine T WITH (NOLOCK) 
     ON B.HeaderID = T.HeaderID 
    INNER JOIN 
     Staging.HeaderLine H WITH (NOLOCK) 
     ON T.HeaderID = H.HeaderID 
    WHERE H.BatchID = B.BatchID AND H.SourceSystemInstance = B.SourceSystem AND AccountNumber = 399990 
    GROUP BY 
     B.BatchID 
     ,B.HeaderID 
    ) BalancingLinesTable ON B.BatchID = BalancingLinesTable.BatchID 

INNER JOIN (
    SELECT 
     B.BatchID 
     ,B.HeaderID 
     ,COUNT(0) AS TotalLines 
    FROM 
     @batches B 
    INNER JOIN 
     Staging.TransactionLine T WITH (NOLOCK) 
    ON 
     B.HeaderID = T.HeaderID 
    WHERE 
     T.LineStatus = 'N' 
    GROUP BY 
     B.BatchID 
     ,B.HeaderID) SRC ON B.BatchID = SRC.BatchID 

LEFT JOIN (
    SELECT 
     B.BatchID 
     ,B.HeaderID 
     ,MT.Company 
     ,COUNT(0) AS TotalLines 
    FROM 
     @batches B 
    INNER JOIN 
     [Production].[dbo].[Mutated_Transactions] MT WITH (NOLOCK) 
    ON 
     B.HeaderID = MT.HeaderID 
    WHERE 
     MT.RowHasError = 'N' 
    GROUP BY 
     B.BatchID 
     ,B.HeaderID 
     ,MT.Company) STG ON SRC.BatchID = STG.BatchID AND SRC.HeaderID = STG.HeaderID 

GROUP BY 
    B.BatchID 
    ,B.TransformDate 
    ,B.SourceSystem 
    ,B.CompanyType 
    ,STG.Company 

ORDER BY 
    B.TransformDate desc 
    ,B.BatchID 

END

+0

也許問你的同事? – peterm

+0

我可以想出一個BS故事。但這是一個技術問題,可以在不知道「商業方面」的情況下得到解答。事實是,我很難找到他...... – Danny

回答

0

哇..改變accoutnumber = 98765後, '98765' 我擺脫了錯誤的。但結果輸出仍然是空的。看起來我忘了在SSRS列中添加[BalancingLines]。是啊..我知道..