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..
In-memory table multiple INNER JOIN
-
30-05-2022 - |
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
Solution
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow