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

Откуда:
Сообщений: 183
Помогите пожалуйста с запросом

есть такой запрос, который выдает все занесенные счета
SELECT DISTINCT 
                      viborka.nomerStr, viborka.nomer, urLica.name, viborka.data, viborka.dataDo, viborka.summaOpl, viborka.otgruzka, viborka.formDoc, viborka.nomerDocProd
FROM         viborka INNER JOIN
                      urLica ON viborka.kontragent = urLica.idUrllico

WHERE     (viborka.aktualnost = @aktualnost) AND (viborka.del = 0)


нужно добавить к вывод еще сумму по счету, которая будет являться суммой по полю viborka.summa для одинаковых viborka.nomer

если просто добавить viborka.summa к SELECT DISTINCT, то выдает все строки относящиеся к одному счету, а надо так же одну строку, но с суммой
26 сен 13, 22:27    [14890103]     Ответить | Цитировать Сообщить модератору
 Re: Сумма в SELECT DISTINCT  [new]
ilshatkin
Member

Откуда:
Сообщений: 183
неожиданно сделал сам ))

SELECT DISTINCT viborka.nomerStr, viborka.nomer, urLica.name, viborka.data, viborka.dataDo, viborka.summaOpl, viborka.otgruzka, viborka.formDoc, viborka.nomerDocProd,
                          (SELECT SUM(summa) AS Expr1
                            FROM          viborka AS viborka1
                            WHERE      (viborka.nomer = nomer)) AS summaScheta
FROM         viborka INNER JOIN
                      urLica ON viborka.kontragent = urLica.idUrllico
WHERE     (viborka.aktualnost = @aktualnost) AND (viborka.del = 0)
26 сен 13, 22:44    [14890177]     Ответить | Цитировать Сообщить модератору
 Re: Сумма в SELECT DISTINCT  [new]
Crimzic
Member

Откуда: Sydney
Сообщений: 59
ilshatkin,

Наверное, вы просто не до конца разобрались с аггрегатами.
В зависимости от ваших данных и нужного результата лучше вот так:
SELECT v.nomerStr, v.nomer, urLica.name, v.data, 
	v.dataDo, v.summaOpl, v.otgruzka, v.formDoc, v.nomerDocProd,
	SUM(v.summa) AS summaScheta	-- v
FROM viborka v 
	INNER JOIN urLica ON viborka.kontragent = urLica.idUrllico
WHERE     (viborka.aktualnost = @aktualnost) AND (viborka.del = 0)
GROUP BY v.nomerStr, v.nomer, urLica.name, v.data, v.dataDo, v.summaOpl, v.otgruzka, v.formDoc, v.nomerDocProd


Или вот так:
SELECT v.nomerStr, v.nomer, urLica.name, v.data, 
	v.dataDo, v.summaOpl, v.otgruzka, v.formDoc, v.nomerDocProd,
	SUM(v1.summa) AS summaScheta	-- v1
FROM viborka v 
	INNER JOIN urLica ON viborka.kontragent = urLica.idUrllico
	INNER JOIN viborka v1 ON v1.nomer = v.nomer
WHERE     (viborka.aktualnost = @aktualnost) AND (viborka.del = 0)
GROUP BY v.nomerStr, v.nomer, urLica.name, v.data, v.dataDo, v.summaOpl, v.otgruzka, v.formDoc, v.nomerDocProd
27 сен 13, 04:21    [14890675]     Ответить | Цитировать Сообщить модератору
 Re: Сумма в SELECT DISTINCT  [new]
ilshatkin
Member

Откуда:
Сообщений: 183
Crimzic, очень благодарю за ответ. Буду разбираться в Вашем решении.
3 окт 13, 03:37    [14915822]     Ответить | Цитировать Сообщить модератору
 Re: Сумма в SELECT DISTINCT  [new]
ilshatkin
Member

Откуда:
Сообщений: 183
Поясните, пожалуйста, в чем отличие Ваших двух подходов.
3 окт 13, 03:39    [14915823]     Ответить | Цитировать Сообщить модератору
 Re: Сумма в SELECT DISTINCT  [new]
Crimzic
Member

Откуда: Sydney
Сообщений: 59
ilshatkin,

Первый вариант: Суммирует все Viborka с одинаковыми nomerStr, nomer, data, dataDo, summaOpl, otgruzka, formDoc, nomerDocProd, urLica.name (см. GROUP BY).
Второй вариант: Суммирует все Viborka с одинаковым nomer (см. условие в INNER JOIN viborka v1. GROUP BY такой же). Он ближе к тому варианту, до которого вы дошли сами, но менее производительный чем мой первый вариант из-за дополнительного соединения с таблицей viborka.

Какой из них лучше в вашем случае - решать вам в зависимости от требований к результату запроса. Если бы вы показали пример с данными (input/output), то можно было бы подсказать точнее.
3 окт 13, 05:02    [14915837]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить