Использование простого запроса в сложном запросе приводит к ошибке «Неверное имя столбца» - PullRequest
0 голосов
/ 29 марта 2019

Когда я запускаю следующий запрос, ошибки нет, но когда я использую тот же запрос в сложном запросе, я получаю ошибку

Неверное имя столбца 'BillPaidAmount'

Простой запрос, который выполняется без ошибок:

select 
    DateOfPayment,
    isnull(sum(BillPaidAmount), 0) 
from 
    SupplyInvoicePaymentHistory 
group by 
    DateOfPayment

Сложный запрос, который выдает ошибку "Неверное имя столбца 'BillPaidAmount'":

with Income (DateSold, Income) as 
(
     select 
         DateSold, isnull(sum(TotalBill), 0)
     from 
         SalesInvoice 
     group by 
         DateSold
),
SupplierPayments (DateOfPayment, BillPaidAmount) as
(
     select 
         DateOfPayment, isnull(sum(BillPaidAmount), 0) 
     from 
         SupplyInvoicePaymentHistory 
     group by 
         DateOfPayment
),
Expensis (Date, Amount) as
(
    select 
        Date, isnull(sum(Amount), 0) 
    from 
        GeneralExpense 
    group by Date
), 
t as 
(
    select 
        i.DateSold, e.Date, sp.DateOfPayment, i.income, e.Amount, 
        sum(isnull(i.income, 0) - (isnull(e.Amount, 0) + isnull(sp.BillPaidAmount, 0))) over (order by i.DateSold, e.Date, sp.DateOfPayment) as closing_balance 
    from 
        income i 
    full outer join 
        expensis e on e.Date = i.DateSold 
    full outer join 
        SupplierPayments sp on sp.DateOfPayment = i.DateSold
) 
select 
    m.DateSold, m.Date, m.DateOfPayment,
    isnull(m.opening_balance, 0) as Opening_Balance,
    isnull(m.Income, 0) as Income,
    isnull(m.Amount, 0) as Expensis,
    isnull(m.closing_balance, 0) as Closing_Balance
from 
    (select 
         DateSold, Date, DateOfPayment, 
         lag(closing_balance, 1, 0) over (order by DateSold, Date, DateOfPayment) as opening_balance,
         Income, Amount, closing_balance,
         BillPaidAmount 
     from 
         t) as m 

Я получил ошибку

Неверное имя столбца 'BillPaidAmount'

в последней строке кода выше, т.е.

select 
    DateSold, Date, DateOfPayment, 
    lag(closing_balance,1,0) over (order by DateSold, Date, DateOfPayment) as opening_balance,
    Income, Amount, closing_balance, BillPaidAmount 
from t

1 Ответ

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

Если вы правильно отформатируете свой код, легко понять, почему произошла ошибка.Я не вижу столбца с именем BillPaidAmount в таблице 't'

with Income( DateSold, Income ) as (
    select DateSold,isnull(sum(TotalBill),0)
    from SalesInvoice group by DateSold)
, SupplierPayments( DateOfPayment,BillPaidAmount ) as(
    select DateOfPayment,isnull(sum(BillPaidAmount),0) 
    from SupplyInvoicePaymentHistory group by DateOfPayment
), Expensis( Date, Amount ) as(
    select Date ,isnull(sum(Amount),0) 
    from GeneralExpense group by Date
), t as (
    select i.DateSold
        ,e.Date
        ,sp.DateOfPayment
        ,i.income
        , e.Amount
        , sum(isnull(i.income,0)-(isnull(e.Amount,0)+isnull(sp.BillPaidAmount,0))) over (order by i.DateSold,e.Date,sp.DateOfPayment) as closing_balance 
    from income i 
    full outer  join expensis e on e.Date = i.DateSold 
    full outer join SupplierPayments sp on sp.DateOfPayment=i.DateSold
) 
select m.DateSold
    ,m.Date
    ,m.DateOfPayment
    ,isnull(m.opening_balance,0) as Opening_Balance
    ,isnull(m.Income,0) as Income,isnull(m.Amount,0) as Expensis
    ,isnull(m.closing_balance,0) as Closing_Balance
from (
    select DateSold
        ,Date
        ,DateOfPayment
        ,lag(closing_balance,1,0) over (order by DateSold, Date,DateOfPayment) as opening_balance,Income
        , Amount,closing_balance
        ,BillPaidAmount 
    from t
) as m 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...