Оптимизированный SQL-запрос с несколькими объединениями - PullRequest
0 голосов
/ 27 марта 2019

Я работаю над созданием представления SQL.

У меня есть ниже:

  • Таблица A: Информация об учетной записи клиента
  • Таблица B: Отношение счета к подписке
  • Таблица C: Выплаченная суммаЗаказчиком для каждой подписки и других сведений
  • Таблица D: Вся информация, связанная с подпиской

Таблица A:

AccountNum
Customer_Name
CustomerCode

Таблица B:

SubscriptionId
SubscriptionName
AccountNum

Таблица C:

SubscriptionId
AccountNum
AmountPaid

Таблица D:

SubscriptionId
SubscriptionName

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

Пример:

Table A:
AccountNum   Customer_Name   CustomerCode
1234         TestName        TestCode  
12345        Testname1       TestCode1

Table B:
SubscriptionId  SubscriptionName  AccountNum
12              Netflix           1234
12              Netflix           12345

Table C:
SubscriptionId  AccountNum   AmountPaid
12              1234         100
12              12345        100

Table D:
SubscriptionId  SubscriptionName
12              Netflix 
13              Prime

Таким образом, в приведенном выше случае номер счета 1234 и 12345 принадлежит одному клиенту, и обе учетные записи являютсяпривязан к той же подписке.Поэтому я пытаюсь написать запрос для AccountNum # 1234 в качестве входных данных и получить идентификатор подписки, имя подписки, сумму, уплаченную за одну и ту же подписку с другого аккаунта одного и того же клиента в одном запросе.

1 Ответ

0 голосов
/ 28 марта 2019

Вы не можете выполнять агрегатную функцию и извлекать поля, которые не используются в 'group by' в том же запросе, поскольку это противоречит Вы можете использовать приведенный ниже запрос, чтобы найти общую сумму, потраченную на одного клиента

select 
      a.CustomerCode, 
      sum(case when c.AmountPaid is not null 
               then c.AmountPaid else 0 end) as TotalAmtPaid
   from a
      inner join b
         on a.AccountNum=b.AccountNum
      inner join c
         on a.AccountNum=c.AccountNum
    where 
      a.AccountNum = ?
    group by 
      a.CustCode;

если вы хотите также получить информацию о подписке, необходимо отобразить несколько строк с общей суммой в каждой строке, что не имеет смысла

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...