2017-02-07 3 views
0

У меня есть две таблицы: «счет-фактура» как I и «Дебиторская задолженность» как AR.Ошибка соединения таблицы SQL

AR В таблицу входит выставленный счет-фактура (с идентификатором 0) и полученная денежная сумма (с идентификатором 4), а таблица I содержит колонку суммы счета и корректировочную колонку.

Помимо обычных счетов-фактур и корректировок существуют случаи, когда корректировки были внесены в счет-фактуру, а чистый эффект - 0,00 на столе AR. Плюс иногда, счета-фактуры создаются и списываются в таблице счетов перед отправкой, поэтому AR будет иметь 0,00 сумму в AR, но таблица I имеет 100 долларов США в размере и - 100 долларов США в настройке.

Я пытаюсь создать запрос, в котором он дает мне счет-фактуру и наличные деньги, полученные бок о бок, а также создают новый столбец, который включает в себя корректировку счетов-фактур с балансом 0,00 в AR. Столбцы, которые могут вам помочь:

AR.ID = unique ID 
AR.ARinvnumber= Invoice number from Invoice table 
Ar.Type= 0=invoice, 1 = payment received 
Ar.Amount= ARamount saved from invoice 
I.Id= unique ID 
Invoice number = number of invoice 
Invamount= Actual invoice amount 
Inv Adjustment= Adjustment applied on invoice 

Любая идея, как я могу это достичь? Я в состоянии соответствовать I и AR стола и наличные деньги и AR из AR таблицы

Select * 
From (select ar.customerId, ar.customername,ar.invnumber ar.amount, i.invamout, i.invadjustment from Ar join I on ar.arinvnumber=i.invoicenumber where ar.artype=1) inv 
join 
select (select ar.customerId, ar.customername, ar.invnumber ar.amount, i.invamout, i.invadjustment from Ar join I on ar.arinvnumber=i.invoicenumber where ar.artype=1) cash 

on inv.invnumber=cash.invnumber and inv.customerid=cash.customerid 

после получения этого, как я могу включить эти счета-фактуру, для которых настройка была сделана, но там не было AR потому что корректировка равна сумма счета-фактуры.

Следующий ответ сработал для меня. В основном я хотел включить все корректировки из таблицы счетов, в том числе те, которые не заполнены в таблице AR, поскольку были внесены корректировки, чтобы очистить баланс клиента, связанный с работой, выполненной после окончательного счета-фактуры, были проблемы. Я использовал следующий запрос

Select * 
From (select AR.ARInvnum as ARInvnum, AR.Arclientnumber as Aclient, sum(AR.Amount), I.Invoicenumber,  sum(distinct(I.IAmount)), sum(I.IAdjust) 
    From AR.ARInvnum=I.Invoicenumber 
    Where ar.artype=0 
Group by AR.ARInvnum, I.Invoicenumber, AR.Arclientnumber)AInvoice 
Left join 
    (select AR.ARInvnum as PARInvnum, AR.Arclientnumber as PClient,  sum(AR.Amount), I.Invoicenumber, sum (I.IAmount), sum(I.IAdjust) 
    From AR.ARInvnum=I.Invoicenumber 
    Where ar.artype=4 
Group by AR.ARInvnum, I.Invoicenumber, AR.ARclientnumber)PInvoice 
on 
AInvoice.ARInvnum=PInvoice.PARInvnum 
and 
AInvoice.Aclient=PInvoice.PClient 

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

ответ

0

Вам необходимо включить ограничение, также известное как предложение where. MSDN документация по select выкладывает синтаксис выглядит следующим образом:

SELECT select_list [ INTO new_table ] 

[ FROM table_source ] [ WHERE search_condition ] 

[ GROUP BY group_by_expression ] 

[ HAVING search_condition ] 

[ ORDER BY order_expression [ ASC | DESC ] ] 

Имейте в виду, вам не нужно будет каждое выражение, чтобы создать правильный оператор выбора. Также вам не нужно присоединяться к одному и тому же запросу. Почему бы не упростить, выполнив сам запрос?

select 
    ar.customerId, ar.customername, ar.invnumber, 
    ar.amount, i.invamout, i.invadjustment 
from Ar 
    join I on ar.arinvnumber=i.invoicenumber 
where ar.artype=1 

Но ваши вопросы спрашивает, как ограничить результаты только

те счета, для которых настройка были сделаны, но там не было [дебиторская задолженность]

Обновить свой ИНЕКЕ что-то вроде

where ar.artype=1 and i.adjustment is not null and i.adjustment = i.invamount 

Это ограничит результаты r eturned в select заявлении только те записи, которые удовлетворяют всем трем следующим критериям:

  1. artype равно 1
  2. регулировки не нулевой
  3. регулировка равна invamount

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

+0

Спасибо Натан, я пробовал, но это не сработало. Поэтому я взял результат и создал новую таблицу, чем выполнил второй запрос и присоединился к результату. Это сработало. Спасибо за Вашу поддержку. – Invisible

Смежные вопросы