Как я могу объединить 2 стола вместе? - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь создать объединяющую таблицу с двумя существующими таблицами. что-то вроде ниже:

Это первая таблица запросов и выглядит так

https://ibb.co/sg2MXKf

SELECT
    DATEPART( week, dbo.Income.IncomeDate ) AS [Week Income],
    DATEPART( YEAR, dbo.Income.IncomeDate ) AS [Year],
    SUM ( dbo.Income.CardAmount ) AS [Total Card],
    SUM ( dbo.Income.CashAmount ) AS [Total Cash],
    SUM ( dbo.Income.TipsAmount ) AS [Total Tip],
    SUM ( dbo.Income.SalaryAmount ) AS [Total Salary],
    SUM ( dbo.Income.Adjustment ) AS [Total Adjustment] 
FROM
    dbo.Income 
GROUP BY
    DATEPART( week, dbo.Income.IncomeDate ),
    DATEPART( YEAR, dbo.Income.IncomeDate ) 
ORDER BY
    DATEPART(YEAR, dbo.Income.IncomeDate )

А это вторая таблица запросов и выглядит так

https://ibb.co/z8sRwpT

SELECT
    DATEPART( wk, dbo.Transactions.PaymentMadeOn ) AS [Week],
    COUNT (DATEPART( wk, dbo.Transactions.PaymentMadeOn )) AS [Expenses Count],
    DATEPART( YEAR, dbo.Transactions.PaymentMadeOn ) AS [Year],
    SUM ( dbo.Transactions.PaymentAmount ) AS [Total] 
FROM
    dbo.Transactions 
GROUP BY
    DATEPART( wk, dbo.Transactions.PaymentMadeOn ),
    DATEPART( YEAR, dbo.Transactions.PaymentMadeOn ) 
ORDER BY
    DATEPART( YEAR, dbo.Transactions.PaymentMadeOn )

Я ожидал чего-то такого. Обе таблицы 1 и 2 объединены, и добавлены общие расходы.

https://ibb.co/0DbZLYV

1 Ответ

0 голосов
/ 08 января 2019

Как прокомментировали SO люди, мы не можем получить доступ к изображениям, которые описывают ваши ожидаемые результаты. Однако мы понимаем, что вы ищете JOIN результаты обоих запросов, которые вы показываете.

Вот как это сделать: вы превращаете каждый запрос в подзапрос и JOIN объединяете их в полях общих ключей; в вашем случае это должны быть Year и Week. Предложение ORDER BY необходимо переместить во внешний запрос. В предложениях SELECT, WHERE и ORDER BY вы можете свободно обращаться ко всем полям из подзапросов, используя определенные вами псевдонимы (здесь A и B).

Пример кода (вам придется адаптировать SELECT, я не могу сказать, как вы хотите, чтобы он выглядел):

SELECT
    A.[Week Income],
    A.[Year],
    A.[Total] - B.[Total Salary] AS [Balance]
    ...
 FROM (           
    SELECT
        DATEPART( week, dbo.Income.IncomeDate ) AS [Week Income],
        DATEPART( YEAR, dbo.Income.IncomeDate ) AS [Year],
        SUM ( dbo.Income.CardAmount ) AS [Total Card],
        SUM ( dbo.Income.CashAmount ) AS [Total Cash],
        SUM ( dbo.Income.TipsAmount ) AS [Total Tip],
        SUM ( dbo.Income.SalaryAmount ) AS [Total Salary],
        SUM ( dbo.Income.Adjustment ) AS [Total Adjustment] 
    FROM
        dbo.Income 
    GROUP BY
        DATEPART( week, dbo.Income.IncomeDate ),
        DATEPART( YEAR, dbo.Income.IncomeDate ) 
 ) AS A 
 LEFT JOIN (  
    SELECT
        DATEPART( wk, dbo.Transactions.PaymentMadeOn ) AS [Week],
        COUNT (DATEPART( wk, dbo.Transactions.PaymentMadeOn )) AS [Expenses Count],
        DATEPART( YEAR, dbo.Transactions.PaymentMadeOn ) AS [Year],
        SUM ( dbo.Transactions.PaymentAmount ) AS [Total] 
    FROM
        dbo.Transactions 
    GROUP BY
        DATEPART( wk, dbo.Transactions.PaymentMadeOn ),
        DATEPART( YEAR, dbo.Transactions.PaymentMadeOn ) 
  ) AS B ON A.[Week Income] = B.[Week] AND A.[Year] = B.[Year]
ORDER BY
    A.[Year],
    A.[Week Income]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...