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

Откуда:
Сообщений: 16
Добрый день. Помогите, пожалуйста, с запрос.
Есть две таблицы: номенклатура и заявки.
номенклатура:
nom_id | nom_type
1 | салон
2 | багажник

заявки:
req_num | req_qty | nom_id
25 | 5 | 1
25 | 3 | 2

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


Спасибо.
21 сен 17, 11:09    [20811380]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на сумму в оду строку  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
gigar,

PIVOT, CASE, ну и правильнее динамический PIVOT
21 сен 17, 11:16    [20811419]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на сумму в оду строку  [new]
gigar
Member

Откуда:
Сообщений: 16
Пробовал так
select request.request_num,
(select SUM(request.request_qty) where nomenclature.nomenclature_type='салон') as s,
(select SUM(request.request_qty) where nomenclature.nomenclature_type='багажник') as b
from request
inner join nomenclature
on request.nomenclature_id=nomenclature.nomenclature_id
group by request.request_num,nomenclature.nomenclature_type

но выводится для каждой заявки по две строки, а как сделать чтобы в одну строку выводились?
21 сен 17, 11:22    [20811439]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на сумму в оду строку  [new]
982183
Member

Откуда: VL
Сообщений: 3353
Убери из группировки nomenclature.nomenclature_type
21 сен 17, 11:23    [20811446]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на сумму в оду строку  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
gigar
Пробовал так
select request.request_num,
(select SUM(request.request_qty) where nomenclature.nomenclature_type='салон') as s,
(select SUM(request.request_qty) where nomenclature.nomenclature_type='багажник') as b
from request
inner join nomenclature
on request.nomenclature_id=nomenclature.nomenclature_id
group by request.request_num,nomenclature.nomenclature_type

но выводится для каждой заявки по две строки, а как сделать чтобы в одну строку выводились?

это не рабочий скрипт
21 сен 17, 11:27    [20811472]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на сумму в оду строку  [new]
gigar
Member

Откуда:
Сообщений: 16
Выводит ошибку
Сообщение 8120, уровень 16, состояние 1, строка 3
Столбец "nomenclature.nomenclature_type" недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY.
21 сен 17, 11:27    [20811473]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на сумму в оду строку  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
gigar,

DECLARE @nomenclature TABLE (nom_id INT, nom_type VARCHAR(255))
INSERT INTO @nomenclature (nom_id , nom_type )
VALUES  (1 , 'салон'),
	(2 , 'багажник')

DECLARE @request TABLE (req_num INT, req_qty INT, nom_id INT)
INSERT INTO @request (req_num , req_qty , nom_id )
VALUES  
(25 , 5 , 1),
(25 , 3 , 2)


SELECT  
	a.req_num,
	SUM(CASE WHEN b. nom_type = 'салон' THEN req_qty ELSE 0 END) as s,
	SUM(CASE WHEN b.nom_type = 'багажник' THEN req_qty ELSE 0 END) as b
FROM	
	@request		a
INNER JOIN 
	@nomenclature		b
ON 
	a.nom_id	= b.nom_id
GROUP BY  
	a.req_num
21 сен 17, 11:36    [20811533]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на сумму в оду строку  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
SELECT req_num
,салон=SUM(CASE nom_id WHEN 1 THEN req_qty ELSE 0 END)
,багажник=SUM(CASE nom_id WHEN 2 THEN req_qty ELSE 0 END)
FROM заявки
GROUP BY req_num;
21 сен 17, 11:36    [20811538]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на сумму в оду строку  [new]
gigar
Member

Откуда:
Сообщений: 16
Спасибо. Теперь работает как надо.
21 сен 17, 11:44    [20811605]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить