Получить значение из объединенной таблицы без значения в первичной таблице - PullRequest
0 голосов
/ 29 октября 2019

Запрос, показанный ниже, является примерно правильным, но мне нужно иметь строку для каждого фискального идентификатора, т.е. в выводе, показанном ниже, должна быть новая строка после строки 4 с данными (снимок экрана ниже)

Я использую запрос:

    SELECT a.companyId,a.profitCenterID,a.coaID,a.fiscalId,
       COALESCE(SUM(a.amount * -1),0) amount,
       twelveMo = (
       SELECT COALESCE(SUM(amount * -1), 0)
       FROM gl a1
       LEFT OUTER JOIN fiscal f ON a1.fiscalId=f.Id
       WHERE  
           a1.companyId      =  a.companyId AND
           a1.profitCenterId =  a.profitCenterId AND
           a1.coaId          =  a.coaId AND
           f.Id              >  a.fiscalId - 12 AND 
           f.Id              <= a.fiscalId
        )
    FROM gl a
    INNER JOIN coa c ON c.Id=a.coaId AND c.statementType=4
    GROUP BY companyId,profitCenterId,coaId,a.fiscalId  
    ORDER BY companyId,profitCenterId,coaId,a.fiscalId

Desired query result

1 Ответ

0 голосов
/ 29 октября 2019

Я не знаю ваших образцов данных и вашей схемы, поэтому я только что добавил свой запрос поверх ваших.

;WITH CTE_NUM_TEMP AS 
(
    SELECT 1 AS Fiscal
    UNION ALL
    SELECT Fiscal+1 FROM CTE_NUM_TEMP
    WHERE Fiscal+1<=100
)

SELECT ISNULL(Der.companyId,1) AS companyId,ISNULL(Der.profitCenterID,1) AS profitCenterID,
ISNULL(Der.coaID,40000) AS coaID,IIF(twelveMo IS NULL,LAG(twelveMo,1) OVER(ORDER BY Fiscal),twelveMo) AS twelveMo
FROM CTE_NUM_TEMP AS Num
LEFT JOIN 
(
    SELECT a.companyId,a.profitCenterID,a.coaID,a.fiscalId,
    COALESCE(SUM(a.amount * -1),0) amount,
    twelveMo = (
    SELECT COALESCE(SUM(amount * -1), 0)
    FROM gl a1
    LEFT OUTER JOIN fiscal f ON a1.fiscalId=f.Id
    WHERE  
        a1.companyId      =  a.companyId AND
        a1.profitCenterId =  a.profitCenterId AND
        a1.coaId          =  a.coaId AND
        f.Id              >  a.fiscalId - 12 AND 
        f.Id              <= a.fiscalId
    )
    FROM gl a
    INNER JOIN coa c ON c.Id=a.coaId AND c.statementType=4
    GROUP BY companyId,profitCenterId,coaId,a.fiscalId  
)AS Der
ON Num.Fiscal=Der.fiscalId
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...