Составить T-SQL запрос

Sasha3091
Уже с Приветом
Posts: 1373
Joined: 05 Sep 2008 01:22

Составить T-SQL запрос

Post by Sasha3091 »

Всем привет.

Вопрос знатокам (MS SQL 2008 R2).

Есть таблица tblPlacementSchedule

Code: Select all

ID int,
PlacementID int,
JobDate SmallDateTime,
Hours float,
BilledAmount decimal(10,6),
PaidRate decimal(10,6),
PaidAmount decimal(10,6),
PaidDate SmallDateTime,
Void bit

Требование такое, что, если клиент нажимает кнопку Void, создается копия строки, где Hors умножается на -1. Это делается, если произошла ошибка в биллинге, например. При этом, разумеется, если PaidAmount>0, то получается, что деньги, который уже выплатили нужно вернуть. То есть вычесть из следующего чека.

Скажем Void PaidAmount=$300 - это долг.

Сумма следующего чека (Hours*PaidRate)=$100, Таким образом мне нужно эти $100 использовать для уменьшения размера долга.

Как построить такой запрос?


Скажем - я могу посчитать сумму долга как

Code: Select all

select sum(PaidAmount) from tblPlacementSchedule where Void=1
Но как я узнаю сумму, уплаченную в счет этого долга?
User avatar
ie
Уже с Приветом
Posts: 11092
Joined: 15 May 2002 02:09
Location: Boston, MA

Re: Составить T-SQL запрос

Post by ie »

Sasha3091 wrote: 13 Dec 2018 17:47 Как построить такой запрос?
что-то типа

Code: Select all

select id, sum(Hours*PaidRate) - (select sum(PaidAmount) from tblPlacementSchedule x where x.id = ss.id and PaidAmount>0 and Hors < 0)
from tblPlacementSchedule ss
group by id
Sasha3091
Уже с Приветом
Posts: 1373
Joined: 05 Sep 2008 01:22

Re: Составить T-SQL запрос

Post by Sasha3091 »

ie wrote: 13 Dec 2018 18:04
Sasha3091 wrote: 13 Dec 2018 17:47 Как построить такой запрос?
что-то типа

Code: Select all

select id, sum(Hours*PaidRate) - (select sum(PaidAmount) from tblPlacementSchedule x where x.id = ss.id and PaidAmount>0 and Hors < 0)
from tblPlacementSchedule ss
group by id
Спасибо за Ваш вариант, но он не будет работать.

Если х вернет 0, то есть, если нет ни одной записи то, что получу - сумму ранее уплаченных денег?

Можно, конечно, сначала проверять количество записей в таблице х и, если это количество 0 то останавливаемся на этом - догов нет.

Допустим у нас всего 1 запись в таблице tblPlacementSchedule и PaidAmount=$100. Эта же строка voided (void=1 and PaidAmount>0 and Hours<0) , таким образом Ваш запрос вернет мне $0, вместо $100
User avatar
ie
Уже с Приветом
Posts: 11092
Joined: 15 May 2002 02:09
Location: Boston, MA

Re: Составить T-SQL запрос

Post by ie »

Sasha3091 wrote: 13 Dec 2018 21:08 Спасибо за Ваш вариант, но он не будет работать.
давайте начнем с того, что вы напишите внятно каким вы видите результат этого запроса.
тоесть таблица, с колонками в которых что? :rtfm:
Sasha3091
Уже с Приветом
Posts: 1373
Joined: 05 Sep 2008 01:22

Re: Составить T-SQL запрос

Post by Sasha3091 »

Таблица

Code: Select all

ID	PlacementID	WeekEndDate	JobDate	     Hours	PaidRate AmountToPay	PaidAmount	PaidDate	Void
136613	6731	          11/17/2018	11/11/2018	12	$20.14	$241.68	           $241.68	11/24/2018	1
136616	6731	          11/17/2018	11/12/2018	12	$20.14	$241.68	           $241.68	11/24/2018	0
136619	6731	          11/17/2018	11/13/2018	12	$20.14	$241.68	           $241.68	11/24/2018	0
136622	6731	          11/17/2018	11/14/2018	12	$20.14	$241.68	           $241.68	11/24/2018	0
136625	6731	          11/17/2018	11/15/2018	12	$20.14	$241.68	           $241.68	11/24/2018	0
136628	6731	          11/17/2018	11/16/2018	12	$20.14	$241.68	           $241.68	11/24/2018	0
136631	6731	          11/17/2018	11/17/2018	12	$20.14	$241.68	           $221.54	11/24/2018	0
136634	6731	          11/17/2018	11/17/2018	1	$20.14	$20.14	            $20.14	11/24/2018	0
136635	6732	          11/24/2018	11/18/2018	2	$20.14	$40,18	              $0.00	NULL	        0
136647	6732	          11/24/2018	11/22/2018	1	$20.14	$20.14	              $0.00	NULL	        0
136659	6733	           12/1/2018	11/25/2018	2	$20.14	$40.18	              $0.00	NULL	        0
136662	6733	           12/1/2018	11/26/2018	1	$20.14	$20.14	              $0.00	NULL	        0
Строка 136613 voided. Сумма $241.68 - это сумма, которую нужно вычесть из следующих чеков

Чек выписывается за каждый WeekEndDate

Ранее выписанный чек за 11/17/2018 на сумму $1,691.76. Из это суммы $241.68 выплачено по ошибке. Но чек уже депозирован в банк получателя

Мы должны выписать чеки за WeekEndDate 11/24/2018 и за 12/1/2018 с учетом того, что $241.68 нужно вычесть из этих чеков.

Как посчитать правильно AmountToPay.

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

Спасибо.
User avatar
ie
Уже с Приветом
Posts: 11092
Joined: 15 May 2002 02:09
Location: Boston, MA

Re: Составить T-SQL запрос

Post by ie »

Sasha3091 wrote: 13 Dec 2018 23:15
Мы должны выписать чеки за WeekEndDate 11/24/2018 и за 12/1/2018 с учетом того, что $241.68 нужно вычесть из этих чеков.

Как посчитать правильно AmountToPay.

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

Спасибо.
если суммы не достаточно для покрытия долга... то долг не будет покрыт. :pain1:
вопрос в том как ваша программа (отчет) это представит? пральна?

то есть может это 0 (zero), то бишь "мы вам сегодня не заплатим, т.к. вы нам должны"
может это -- минус столько-то, и "please deposit some $$$, т.к. вы нам должны."

вам надо поговорить с теми кто устанавливает эти правила, кто этим занимается on the business side.
User avatar
ALV00
Уже с Приветом
Posts: 1491
Joined: 08 Mar 2002 10:01
Location: NJ

Re: Составить T-SQL запрос

Post by ALV00 »

Запись с отрицательной суммой не проще добавить? В бухгалтерии это называется сторно-проводка.
Sasha3091
Уже с Приветом
Posts: 1373
Joined: 05 Sep 2008 01:22

Re: Составить T-SQL запрос

Post by Sasha3091 »

ALV00 wrote: 16 Dec 2018 03:59 Запись с отрицательной суммой не проще добавить? В бухгалтерии это называется сторно-проводка.
Я так и сделаю, в отдельной таблице. Как только они нажмут Void в таблицу добавится запись, скажем 100 баксов.

Затем новый чек, допустим на 900, из которых 100 в счет уплаты долга, таким образом мы создаем еще одну запись -100

Все - вышли в 0.
Sasha3091
Уже с Приветом
Posts: 1373
Joined: 05 Sep 2008 01:22

Re: Составить T-SQL запрос

Post by Sasha3091 »

ie wrote: 15 Dec 2018 15:47
Sasha3091 wrote: 13 Dec 2018 23:15
Мы должны выписать чеки за WeekEndDate 11/24/2018 и за 12/1/2018 с учетом того, что $241.68 нужно вычесть из этих чеков.

Как посчитать правильно AmountToPay.

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

Спасибо.
если суммы не достаточно для покрытия долга... то долг не будет покрыт. :pain1:
вопрос в том как ваша программа (отчет) это представит? пральна?

то есть может это 0 (zero), то бишь "мы вам сегодня не заплатим, т.к. вы нам должны"
может это -- минус столько-то, и "please deposit some $$$, т.к. вы нам должны."

вам надо поговорить с теми кто устанавливает эти правила, кто этим занимается on the business side.
уже забил стрелку:)

Return to “Вопросы и новости IT”