Member 12693375 Ответов: 3

Требуется SQL-запрос для главной книги


У меня есть два стола А и в
В

MobileNo Кредитная Дата
9888569493 10000 30-Dec-16


В Б

Дата Дебетования MobileNo
9888569493 81 3-апр-17
9888569493 261 3-апр-17
9888569493 500 4-апр-17
9888569493 1000 4-апр-17

Поэтому я хочу, чтобы мой вывод был таким, как показано ниже:

MobileNo Дата Кредит Дебет Баланс
9888569493 30 декабря-16 10000 0 10000
9888569493 3-апр-17 81 9919
9888569493 3-апр-17 261 9658
9888569493 4-апр-17 500 9158
9888569493 4-апр-17 1000 8158


Поэтому, пожалуйста, помогите мне с этим сложным запросом в срочном порядке

Заранее спасибо.

Что я уже пробовал:

Я попробовал вот это:

выберите d.* from(select Date,Credit,Debit, sum(Credit)-сумма(Дебет) в качестве остатка от(

Выберите конвертировать(varchar(10),date ,103) в качестве даты, ISNULL(SUM(CAST(Runs as int)),0) в качестве кредита ,
0 как дебет с UserMobile, где UserMobile .Ритейлер ='9888569493 и месяц = "октябрь" и год =2016
Группа По UserMobile.дата

Союз Всех

Выберите конвертировать(varchar(10),date ,103) в качестве даты, 0 в качестве кредита ,ISNULL(SUM(CAST(Runs as int)),0) в качестве дебета
Из DisptachOrder, Где UserName =9888569493
Группа по дате), а в группе C на даты ,кредитные,дебетовые), как Д

И мой выход таков:
Дата Дебет Кредит Сальдо
NULL 100000 0 100000
04/04/2017 0 81 -81
04/04/2017 0 99 -99
04/04/2017 0 117 -117
04/04/2017 0 252 -252

3 Ответов

Рейтинг:
1

Member 12693375

Спасибо за ответ, но у меня есть две таблицы, так как можно получить текущую сумму после кредита-дебета.

OriginalGriff

Используйте соединение...

Member 12693375

я использовал присоединиться, но не точный результат.может u сделать запрос на эту проблему.помогите плз

OriginalGriff

Какое соединение вы пробовали?

Member 12693375

Внутреннее соединение но я hv две таблицы A и B
В A у меня есть 3 столбца : mobileno,creditpoints,дата
В B у меня есть 3 столбца : mobileno,debitpoints,дата

поэтому я хочу, чтобы выход был таким
Дата Mobileno Кредит Дебетовый Баланс
-- 9888xxx 10000 0 10000
-- 9888xxx 0 500 9500
-- 9888xxx 0 300 9200

А дата-это совсем другое дело.

OriginalGriff

Нет, какой именно оператор JOIN вы написали, чтобы объединить таблицы?

Member 12693375

выберите d.* from(select Date,Credit,Debit, sum(Credit)-сумма(Дебет) в качестве остатка от(

Выберите конвертировать(varchar(10),date ,103) в качестве даты, ISNULL(SUM(CAST(Runs as int)),0) в качестве кредита ,
0 как дебет с UserMobile, где UserMobile .Ритейлер ='9888569493 и месяц = "октябрь" и год =2016
Группа По UserMobile.дата

Союз Всех

Выберите конвертировать(varchar(10),date ,103) в качестве даты, 0 в качестве кредита ,ISNULL(SUM(CAST(Runs as int)),0) в качестве дебета
Из DisptachOrder, Где UserName =9888569493
Группа по дате), а в группе C на даты ,кредитные,дебетовые), как Д

Member 12693375

Есть Решение?????

Рейтинг:
0

Salman622

используйте следующий запрос

SELECT  MobileNo,convert(varchar(10),Date,103) as Date,
        Credit, 
        Debit, 
        SUM(isnull(Credit,0) - isnull(Debit,0)) OVER (ORDER BY Date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as Balance
FROM (Select Date,MobileNo,Credit,0 as Debit from A
Union all
Select Date,MobileNo,0 as Credit,Debit from B) as x
order by Date


Dave Kreskowiak

Этот вопрос был задан полтора года назад. Я серьезно сомневаюсь, что ОП все еще ищет ответ.

Salman622

Я опубликовал ответ, потому что, возможно, он будет полезен для других

Рейтинг:
0

Member 14007337

 Collect data From Table
-------------------------------------
  SELECT * FROM tb_Debit
  select * from tb_credit
  
----------------------------------------
work start from here
-------------------------------------  
   create table #t
   (
     MobileNo Varchar(15),
     Credit float,
     Debit float,
     TrnDate Datetime
   ) 
  
   insert into #t
   (
     MobileNo,Credit,Debit,TrnDate
   )
   Select MobileNo,credit,debit,trnDate
   from
   (
    select MobileNo,credit,0 as debit,trnDate from tb_credit
    union all
    select MobileNo,0 as credit,debit,trnDate from tb_Debit
   )y
   order by trnDate asc
   
   --select * from #t
   
   with #ledger as
   (
      select 
			MobileNo,
			TrnDate,
			Credit,
			Debit,
			ROW_NUMBER()over(ORDER by trndate)as row
      from #t
   )
     SELECT 
			L1.MobileNo,
			L1.TrnDate,
			(ISNULL(MAX(L1.Credit),0)+ ISNULL(SUM(L2.Credit),0)- ISNULL(SUM(L2.Debit),0))  AS Opening,
			L1.Credit As Credit,
			L1.Debit As Debit,
			(ISNULL( L1.Credit,0) + ISNULL(SUM(L2.Credit),0)- ISNULL(SUM(L2.Debit),0)- ISNULL((L1.Debit),0)) As closing
     FROM #ledger L1
     LEFT JOIN #ledger L2
     ON L1.row>L2.row
     GROUP BY L1.MobileNo,L1.TrnDate,L1.Credit,L1.Debit



: Это одно из лучших решений для вашего вопроса