0

Я пытаюсь обновить отчет в SSRS. Запрос создается другим коллегой, используя хранимую процедуру, которая покинула проект и больше не может связаться. Он использовал таблицу в памяти для всех партий, чтобы добавить некоторые скопления.Таблица в памяти несколько INNER JOIN

Столбцы как выходы являются:

  • BatchID
  • TransformDate
  • SourceSystem
  • CompanyType
  • MAX (B.FooterLines) AS FooterTotalLines
  • MAX (SRC.TotalLines) А.С. SourceTotalLines
  • MAX (BalancingLinesTable.Balancing Линии) AS BalancingLines
  • SUM (STG.TotalLines) AS StagingTotalLines
  • (CAST (STG.Company AS межд) * +1000000) + B.BatchID AS CompanyCode

Однако мне нужно добавить дополнительный столбец называемых линиями балансировки. Я разработал для него запрос, и он работает:

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 Аргументы B
  • HeaderLine H
  • FooterLine FL
  • 'INNER JOIN таблицы' BalancingLinesTable
  • 'INNER JOIN таблица' SRC
  • «Таблица ВЛЕВОГО СОЕДИНЕНИЯ» 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' Я избавился от ошибки. Но полученный результат все еще пуст. Похоже, я забыл добавить [BalancingLines] в столбец SSRS. Да .. Я знаю ..