Как удалить пустые строки при использовании объединения всех в нескольких таблицах - PullRequest
0 голосов
/ 14 мая 2018

Как удалить пустые строки при использовании объединения всех в нескольких таблицах

declare @FromDate date='2018-05-01';
    declare @ToDate date='2018-05-10';

    select ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS [SNO],t.MNO,MNAME ,isnull(sum(v1),0.00) as Balance,isnull(sum(v2),0.00) as CurrentPurchase,isnull(sum(v3),0.00) as Deduction
    from (select MNO, PendingDeduc as v1, NULL as v2, NULL as v3
          from tblProductPurchaseBalance where EntryDate between @FromDate and @ToDate union all
          select MNO, NULL as v1, TotalAmount, NULL as v3
          from tblMnoProductPurchase where PurchaseDate between @FromDate and @ToDate union all
          select MemNo as MNO, NULL as v1, NULL as v2, AAVIN
          from tblDeduction where EntryDate between @FromDate and @ToDate       
         ) t inner join TBLMEMBERS on t.MNO=TBLMEMBERS.MNO
    group by t.MNO,MNAME
    order by t.MNO

Образцы данных и результатов мне нужны

1 Ответ

0 голосов
/ 14 мая 2018

Вы не можете использовать t.Balance > 0 в предложении where, так как Balance - это просто псевдоним вашего столбца в select.

Вместо этого вы можете написать HAVING isnull(sum(v1),0.00) > 0 после GROUP BY.

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

SELECT ..., isnull(sum(v1),0.00) Balance
FROM
(
 --Your internal query here
) T
GROUP BY t.MNO,MNAME
HAVING isnull(sum(v1),0.00) > 0

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

 select * from
 ( 
 select ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS [SNO],t.MNO,MNAME ,isnull(sum(v1),0.00) as Balance,isnull(sum(v2),0.00) as CurrentPurchase,isnull(sum(v3),0.00) as Deduction
    from (select MNO, PendingDeduc as v1, NULL as v2, NULL as v3
          from tblProductPurchaseBalance where EntryDate between @FromDate and @ToDate union all
          select MNO, NULL as v1, TotalAmount, NULL as v3
          from tblMnoProductPurchase where PurchaseDate between @FromDate and @ToDate union all
          select MemNo as MNO, NULL as v1, NULL as v2, AAVIN
          from tblDeduction where EntryDate between @FromDate and @ToDate       
         ) t inner join TBLMEMBERS on t.MNO=TBLMEMBERS.MNO
    group by t.MNO,MNAME
   )t
   where T.Balance > 0 OR T.CurrentPurchase > 0 OR T.Deduction > 0
   order by t.MNO
...