создать фильтр потока на основе SQL-запроса - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь создать код запроса sql на основе формулы расчета фильтра потока.

Итак, у меня есть таблица "Vendor Ledger Entry" с двумя важными полями, называемыми "Amount" и "Remaining Amount".

Оба поля являются потоковыми фильтрами, рассчитанными на основе формул с другими таблицами (в данном случае Подробная запись в реестре поставщика

Оставшаяся сумма: "Sum("Detailed Vendor Ledg. Entry".Amount WHERE (Vendor Ledger Entry No.=FIELD(Entry No.),Posting Date=FIELD(Date Filter),Excluded from calculation=CONST(No)))"

Поэтому я "конвертирую"«Оставшаяся сумма» для этого SQL-запроса

   Select Sum([E18375$Detailed Vendor Ledg_ Entry].[Amount]) as 'Valor pendente'
    FROM [E18375$Detailed Vendor Ledg_ Entry]
    INNER JOIN [E18375$Vendor Ledger Entry] 
ON [E18375$Detailed Vendor Ledg_ Entry].[Vendor Ledger Entry No_] = [E18375$Vendor Ledger Entry].[Entry No_]
    WHERE [E18375$Detailed Vendor Ledg_ Entry].[Excluded from calculation] = 0 
AND [E18375$Detailed Vendor Ledg_ Entry].[Document No_]='1707NC006' 
AND YEAR([E18375$Detailed Vendor Ledg_ Entry].[Posting Date])>=2017

Проблема в том, что я получаю значение «Valor pendente», равное «1838» вместо «10», как на изображении ниже.

enter image description here

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

Sum("Detailed Cust. Ledg. Entry"."Amount (LCY)" WHERE (Cust. Ledger Entry No.=FIELD(Entry No.),Entry Type=FILTER(Initial Entry),Posting Date=FIELD(Date Filter)))

Select Sum([Amount (LCY)] FROM [Detailed Cust. Ledg. Entry]
INNER JOIN
[Cust. Ledg. Entry]
ON
[Detailed Cust. Ledg. Entry].[Entry No.] = [Cust. Ledg. Entry].[Entry No.]
WHERE
[Detailed Cust. Ledg. Entry].[Entry Type] = "Initial Entry"

Мой полный запрос приведен ниже:

select 'E18375' as Empresa, [E18375$Detailed Vendor Ledg_ Entry].[Posting Date],
[E18375$Detailed Vendor Ledg_ Entry].[Document No_], 
[E18375$Detailed Vendor Ledg_ Entry].[Vendor No_], 
[E18375$Detailed Vendor Ledg_ Entry].Amount, (Select Sum([Amount (LCY)])
FROM [E18375$Detailed Vendor Ledg_ Entry]
INNER JOIN [E18375$Vendor Ledger Entry] ON [E18375$Detailed Vendor Ledg_ Entry].[Vendor Ledger Entry No_] = [E18375$Vendor Ledger Entry].[Entry No_] 
WHERE [E18375$Detailed Vendor Ledg_ Entry].[Excluded from calculation]=0 
AND [E18375$Detailed Vendor Ledg_ Entry].[Amount]>0) as 'Valor pendente'
from [E18375$Vendor Ledger Entry] inner join [E18375$Detailed Vendor Ledg_ Entry] on [E18375$Detailed Vendor Ledg_ Entry].[Vendor Ledger Entry No_]=[E18375$Vendor Ledger Entry] .[Entry No_] 
where [E18375$Vendor Ledger Entry].[Open]=1 and [E18375$Detailed Vendor Ledg_ Entry].[Document No_]='1707NC006'
group by [E18375$Detailed Vendor Ledg_ Entry].[Posting Date], [E18375$Detailed Vendor Ledg_ Entry].[Document No_],
 [E18375$Detailed Vendor Ledg_ Entry].[Vendor No_], [E18375$Detailed Vendor Ledg_ Entry].[Vendor Ledger Entry No_], 
[E18375$Detailed Vendor Ledg_ Entry].[Amount]
having sum([E18375$Detailed Vendor Ledg_ Entry].[Amount])>0

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

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

Это сделает это:

select 'E18375' as Empresa, 
L4.[Posting Date], 
L4.[Document No_], 
L4.[Vendor No_], 
L4.Amount, 
VT as 'Valor pendente' 
from [E18375$Vendor Ledger Entry] L3
inner join [E18375$Detailed Vendor Ledg_ Entry] L4 on L4.[Vendor Ledger Entry No_]=L3.[Entry No_] 
join (
    Select [Vendor No_], Sum([Amount (LCY)]) as VT
    FROM [E18375$Detailed Vendor Ledg_ Entry] L1
    INNER JOIN [E18375$Vendor Ledger Entry] L2 ON L1.[Entry No_] = L2.[Entry No_] 
    WHERE L1.[Excluded from calculation]=0 AND L1.[Amount]>0
    group by [Vendor No_]
    ) VendorTotal on VendorTotal.[Vendor No_]=L4.[Vendor No_]
where L3.[Open]=1 and L4.[Document No_]='1707NC006'
and VT>0
0 голосов
/ 17 сентября 2018

Похоже, у вас есть только 2 таблицы, которые вас интересуют:

[E18375 $ Подробная запись продавца] [E18375 $ Запись в реестре поставщиков]

Похоже, вы пропустили [Entry Type] = "Initial Entry" из вашего запроса:

Select Sum([E18375$Detailed Vendor Ledg_ Entry].[Amount]) as 'Valor pendente'
FROM [E18375$Detailed Vendor Ledg_ Entry]
INNER JOIN [E18375$Vendor Ledger Entry] ON [E18375$Detailed Vendor Ledg_ Entry].[Entry No_] = [E18375$Vendor Ledger Entry].[Entry No_]
WHERE [E18375$Detailed Vendor Ledg_ Entry].[Excluded from calculation] = 0
AND [E18375$Detailed Vendor Ledg_ Entry].[Entry Type] = "Initial Entry";

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

...