Question

I am trying to update a report in SSRS. The query is build by another colleague using a stored procedure, whom has left the project and can't contact anymore. He used an in-memory table for all batches in order to add some aggregations.

The columns as outputs are:

  • BatchID
  • TransformDate
  • SourceSystem
  • 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

However I need to add an extra column called Balancing lines. I developed the query for it and it works:

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 

But, the stored procedure written by my collegue is still foreign to me. Do you know how to 'add' my working query to his working stored procedure?

For clarity the table used:

  • @batches B
  • HeaderLine H
  • FooterLine FL
  • 'INNER JOIN table' BalancingLinesTable
  • 'INNER JOIN table' SRC
  • 'LEFT JOIN table' STG

The stored procedure:

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

Was it helpful?

Solution

Wow.. after changing accoutnumber = 98765 to '98765' I got rid of the error. But the resulting output is still empty. It appears I forgot to add the [BalancingLines] in the SSRS column. Yeah.. I know..

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top