Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Хитрый запрос на сумму значений  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Имеется таблица:
канал реализации номер договора платеж тип налога сумма налога
Алжир 10001 500 ндс 100
Алжир 10001 600 ндс 120
Алжир 10001 500 ПФ 20
Алжир 10050 200 ПФ 50
Испания 10002 850 ндс 120


Нужно:
получить таблицу

канал реализации платеж Сумма ндс Сумма ПФ
Алжир1 300 220 70
Испания 850 120 0


По логике, значения налогов нужно просуммировать, а вот значение платежа - sum (t.[Платеж])/count (t.[Платеж]) - не канает, наверное, если есть несколько платежей с разными суммами..

Может кто подскажет логику вычисления..
И наверное нужно пивотить..
18 фев 14, 19:25    [15584934]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос на сумму значений  [new]
Glory
Member

Откуда:
Сообщений: 104751
googlogmob
И наверное нужно пивотить..

Лучше изучить функцию CASE
18 фев 14, 19:36    [15585011]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос на сумму значений  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Glory
googlogmob
И наверное нужно пивотить..

Лучше изучить функцию CASE


Я думал про кейс, но пока не могу понять как его можно использовать в этой ситуации
19 фев 14, 11:15    [15587929]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос на сумму значений  [new]
Glory
Member

Откуда:
Сообщений: 104751
googlogmob
но пока не могу понять как его можно использовать в этой ситуации

Путем помещения функции в текст запроса.
19 фев 14, 11:20    [15587983]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос на сумму значений  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3394
А как вы для Алжира получили сумму 1300? У вас там sum(distinct ...), что ли?
19 фев 14, 11:28    [15588069]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос на сумму значений  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Glory
googlogmob
но пока не могу понять как его можно использовать в этой ситуации

Путем помещения функции в текст запроса.


Glory, спасибо за такую подсказку. Обязательно воспользуюсь.
Как написал в первом посте, пока не могу догадаться логику построения запроса для получения нужно результата. Проблема в том, что платежей по каждому договору может быть несколько, при том, что по каждому платежу может быть несколько налогов.
То есть вывести удельный вес каждого налога легко, а вот как вывести общий уровень всех налогов в правильном значении суммы платежей (убрать с подсчета дублирующееся платежи)?...
19 фев 14, 11:28    [15588076]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос на сумму значений  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Ennor Tiegael
А как вы для Алжира получили сумму 1300? У вас там sum(distinct ...), что ли?


с платежа 500 уплачено 100 ндс + 20 пф, с платежа 600 уплачено 120 ндс, а с платежа 200 уплачено 50 пф
Итого сумма платежей 1300
19 фев 14, 11:31    [15588102]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос на сумму значений  [new]
Glory
Member

Откуда:
Сообщений: 104751
googlogmob
Glory, спасибо за такую подсказку. Обязательно воспользуюсь.

Уровень ответа зависит от уровня вопроса.
19 фев 14, 11:35    [15588132]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос на сумму значений  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Ennor Tiegael
А как вы для Алжира получили сумму 1300? У вас там sum(distinct ...), что ли?


distinct не подойдет потому что могут быть платежи с одинаковыми значениями. я вот думал про промежуточный подсчет с графой "Номер договора" где использовать AVG для платежей, а потом суммировать эти значения по всем договорам.

но что-то сомневаюсь..
19 фев 14, 11:35    [15588133]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос на сумму значений  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3394
Мне кажется, у вас таблица нарушает 1NF. Без перепроектирования, рано или поздно это приведет к катастрофе.

Ну например, когда у вас в рамках одного договора будут несколько действительно разных платежей на одинаковую сумму, вы не сможете их отличить друг от друга.
19 фев 14, 11:36    [15588143]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос на сумму значений  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Glory
googlogmob
Glory, спасибо за такую подсказку. Обязательно воспользуюсь.

Уровень ответа зависит от уровня вопроса.


Glory, я ценю что часто вы даете очень дельные советы, но в сообщении я написал "Я думал про кейс, но пока не могу понять как его можно использовать в этой ситуации", а не вообще в принципе
19 фев 14, 11:37    [15588159]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос на сумму значений  [new]
Dmitry_8888
Member

Откуда:
Сообщений: 38
а как Вы различаете, что первые 500 по Алжиру и третьи 500 это один и тот же платеж(соответственно выкидываете из суммы и получается не 1800, а 1300)?
19 фев 14, 12:43    [15588903]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос на сумму значений  [new]
Glory
Member

Откуда:
Сообщений: 104751
declare @t table([канал реализации] nvarchar(50), 	 [номер договора] nvarchar(50),	 [платеж] int,	 [тип налога] nvarchar(50),	 [сумма налога] int)

insert @t values(N'Алжир',	 N'10001',	 500,	 N'ндс',	 100)
insert @t values(N'Алжир',	 N'10001',	 600,	 N'ндс',	 120)
insert @t values(N'Алжир',	 N'10001',	 500,	 N'ПФ',	 20)
insert @t values(N'Алжир',	 N'10050',	 200,	 N'ПФ',	 50)
insert @t values(N'Испания',	 N'10002',	 850,	 N'ндс',	 120)


select [канал реализации], sum([платеж]), sum([Сумма ндс]), sum([Сумма ПФ])
from(
select [канал реализации],	 [номер договора],	 [платеж],	
 sum(case when [тип налога] = N'ндс' THEN [сумма налога] END) [Сумма ндс],
 sum(case when [тип налога] = N'ПФ' THEN [сумма налога] END) [Сумма ПФ]
 from @t
 group by [канал реализации],	 [номер договора],	 [платеж]
 ) a
 group by [канал реализации]
19 фев 14, 13:08    [15589212]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос на сумму значений  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Glory, огромное Спасибо
19 фев 14, 15:27    [15590832]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить