Отображение трех разных столбцов из трех разных таблиц в SQL - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь отобразить три разных столбца в SQL все из одной базы данных, но каждый из разных таблиц. Один из них называется «Имя», по которому я также хотел бы сгруппировать выходные данные, другой столбец представляет собой вычисление между двумя столбцами «Деньги», а третий столбец - «Дата». NameId - это то, что связывает Имя и Столбец денег, а MoneyId соединяет Деньги с датой

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

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

Select A.Name,
MAX(B.BillsPaid)As Paid, 
MAX(B.BillsSent) As Sent, C.DateId As Date_Id,
-- This is the money Calculation 
(CAST(BillsPaid As decimal(5,0))/CAST(nullif(BillsSent, 0) As 
decimal(5,0))) 
* 100 as Money
From B
Inner Join A on B.NameId = A.NameId
Inner Join C on B.MoneyId = C.MoneyId
Group By A.Name, C.DateId, B.BillsPaid, B.BillsSent 

Я хотел бы видеть это на дисплее. Я новичок в SQL, поэтому всякая помощь очень ценится, спасибо.

 Name          Money(%)      Date
John Doe        87%         June 2019

Вместо этого я вижу

 Name       Paid      Sent     Money     Date 
John Doe     2          4       50%     June 2019
John Doe     1          4       25%     June 2019
John Doe     3          4       75%     July 2019

Я хочу, чтобы деньги были сгруппированы по каждому имени, на каждую дату, однако каждое имя имеет более одного оплаченного / отправленного в месяц

1 Ответ

0 голосов
/ 21 июня 2019

Я полагаю, что это дает вам то, что вы хотите - перекрестное применение немного странно, но удобно :) Если вам нужна дополнительная информация по этому вопросу, в Google есть много информации!

Select
    A.Name
    ,b.[Paid]
    ,b.[Sent]
    ,min(C.DateId) [Date_Id]
    ,(CAST(b.paid As decimal(5,0))/CAST(nullif(b.[sent], 0) as decimal(5,0))) * 100 [Money]
From
    a
    cross apply (
        select
            max(billspaid) [Paid]
            ,max(billssent) [Sent]
        from
            B
        where
            A.NameId = B.NameId
    ) b
    inner join C
        on B.MoneyId = C.MoneyId
group by
    A.Name
    ,b.[Paid]
    ,b.[Sent]

EDIT

Select
    a.Name
    ,b.[Paid]
    ,b.[Sent]
    ,min(C.DateId) [Date_Id]
    ,(CAST(b.paid As decimal(5,0))/CAST(nullif(b.[sent], 0) as decimal(5,0))) * 100 [Money]
From
    a
    cross apply (
        select
            max(billspaid) [Paid]
            ,max(billssent) [Sent]
        from
            B
        where
            A.NameId = B.NameId
    ) b
    inner join b b1
        on a.nameid = b1.nameid
    inner join c
        on b1.MoneyId = c.MoneyId
group by
    a.Name
    ,b.[Paid]
    ,b.[Sent]
...