Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как суммировать данные в запросе?  [new]
Виктор27
Member

Откуда:
Сообщений: 31
Здравствуйте. Подскажите пожалуйста. У меня есть две таблицы:

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

К сообщению приложен файл. Размер - 89Kb
22 сен 16, 09:18    [19694813]     Ответить | Цитировать Сообщить модератору
 Re: Как суммировать данные в запросе?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Виктор27,

студент косяком идёт :) SELECT ... SUM... FROM... GROUP BY
22 сен 16, 09:20    [19694819]     Ответить | Цитировать Сообщить модератору
 Re: Как суммировать данные в запросе?  [new]
Виктор27
Member

Откуда:
Сообщений: 31
TaPaK, У меня получилось:
SELECT Дата, ID_продукта, SUM(Расход_продукта) FROM Расходная_ведомость GROUP BY Дата, ID_продукта
ORDER BY Дата


, но Расход_продукта - это у меня вычисляемый столбец:

SELECT i.ID, i.Дата, i.ID_продукта, Расход_продукта = i.Количество_порций * p.Норма_порции
	FROM Продукт s 
	JOIN Расходная_ведомость i
		ON s.ID = i.ID_продукта
	JOIN Порция p
		ON i.ID_продукта = p.ID_продукта
		AND i.ID_блюда = p.ID_блюда


Как мне объединить эти два запроса? Вот так не получается:

SELECT i.Дата, i.ID_продукта, Расход_продукта = i.Количество_порций * p.Норма_порции, SUM(Расход_продукта)
FROM Продукт s
JOIN Расходная_ведомость i
		ON s.ID = i.ID_продукта
	JOIN Порция p
		ON i.ID_продукта = p.ID_продукта
		AND i.ID_блюда = p.ID_блюда
GROUP BY i.Дата, i.ID_продукта ORDER BY Дата


Выдает ошибку:
Сообщение 8120, уровень 16, состояние 1, строка 24
Столбец "Расходная_ведомость.Количество_порций" недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY.
Сообщение 8120, уровень 16, состояние 1, строка 24
Столбец "Порция.Норма_порции" недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY.
22 сен 16, 10:16    [19695058]     Ответить | Цитировать Сообщить модератору
 Re: Как суммировать данные в запросе?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Виктор27,

SUM(i.Количество_порций * p.Норма_порции)
22 сен 16, 10:19    [19695071]     Ответить | Цитировать Сообщить модератору
 Re: Как суммировать данные в запросе?  [new]
Виктор27
Member

Откуда:
Сообщений: 31
TaPaK, Блин, точно. Спасибо.
А как чтобы вместо ID_продукта было название?

Исправляю так, не работает.
JOIN Расходная_ведомость i
		ON s.ID = i.ID_продукта AND i.ID_продукта = s.ID
22 сен 16, 10:37    [19695208]     Ответить | Цитировать Сообщить модератору
 Re: Как суммировать данные в запросе?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Виктор27,

ну и выведите s.Название

JOIN Расходная_ведомость i
		ON s.ID = i.ID_продукта AND i.ID_продукта = s.ID

эммм я теряю нить вашей логики :) это для каких целей пируэт?
22 сен 16, 10:42    [19695240]     Ответить | Цитировать Сообщить модератору
 Re: Как суммировать данные в запросе?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
Виктор27
А как чтобы вместо ID_продукта было название?
В вашем запросе нужно тогда вывести не i.ID_продукта, а s.Название:
Виктор27
SELECT i.Дата, s.Название

и не забудьте это добавить в GROUP BY
22 сен 16, 10:47    [19695262]     Ответить | Цитировать Сообщить модератору
 Re: Как суммировать данные в запросе?  [new]
Виктор27
Member

Откуда:
Сообщений: 31
[quot TaPaK]
JOIN Расходная_ведомость i
		ON s.ID = i.ID_продукта AND i.ID_продукта = s.ID


)) Это ошибочка вышла.

SELECT i.Дата, i.ID_продукта, SUM(i.Количество_порций * p.Норма_порции) AS Расход_продукта
FROM Продукт s
JOIN Расходная_ведомость i
		ON s.ID = i.ID_продукта
	JOIN Порция p
		ON i.ID_продукта = p.ID_продукта
		AND i.ID_блюда = p.ID_блюда
		WHERE i.ID_продукта = s.Название
GROUP BY i.Дата, i.ID_продукта ORDER BY Дата


Ошибка:
Сообщение 245, уровень 16, состояние 1, строка 38
Ошибка преобразования значения nvarchar "Картошка" в тип данных int.
22 сен 16, 10:48    [19695267]     Ответить | Цитировать Сообщить модератору
 Re: Как суммировать данные в запросе?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
Виктор27
Исправляю так, не работает.
JOIN Расходная_ведомость i
		ON s.ID = i.ID_продукта AND i.ID_продукта = s.ID
Вывод столбцов пишется в SELECT
Зачем вообще трогать для этого JOIN, или другие части запроса? :-)
22 сен 16, 10:48    [19695270]     Ответить | Цитировать Сообщить модератору
 Re: Как суммировать данные в запросе?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Виктор27
WHERE i.ID_продукта = s.Название

уберите вот ето
и просто допишите вот ето
SELECT i.Дата, i.ID_продукта,  s.Название, SUM(i.Количество_порций * p.Норма_порции) AS Расход_продукта
22 сен 16, 10:50    [19695280]     Ответить | Цитировать Сообщить модератору
 Re: Как суммировать данные в запросе?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
Виктор27
SELECT i.Дата, i.ID_продукта, SUM(i.Количество_порций * p.Норма_порции) AS Расход_продукта
FROM Продукт s
JOIN Расходная_ведомость i
		ON s.ID = i.ID_продукта
	JOIN Порция p
		ON i.ID_продукта = p.ID_продукта
		AND i.ID_блюда = p.ID_блюда
		WHERE i.ID_продукта = s.Название
GROUP BY i.Дата, i.ID_продукта ORDER BY Дата
Ээээ, язык SQL, он как бы естественный.

Вы проговаривайте, что пишете, тогда будет легко писать и понимать.

Например,
WHERE i.ID_продукта = s.Название 
проговаривается так:
при условии, что "5" равно "Картошка".
Конечно, серверу такое сравнение не нравится :-)
22 сен 16, 10:51    [19695296]     Ответить | Цитировать Сообщить модератору
 Re: Как суммировать данные в запросе?  [new]
Виктор27
Member

Откуда:
Сообщений: 31
УРАААА))) Работает)))))
Вот я тормоз))) Я просто самоучка и спросить больше неукого.
TaPaK, Maxx, alexeyvg Спасибо Вам большое. Я стараюсь не тупить, вот только плохо получается)) Спасибо Вам еще раз.
22 сен 16, 11:00    [19695358]     Ответить | Цитировать Сообщить модератору
 Re: Как суммировать данные в запросе?  [new]
Виктор27
Member

Откуда:
Сообщений: 31
alexeyvg, Я опять не понимаю(((

--Стоимость продукта
SELECT i.Дата, s.Название, SUM(i.Количество_порций * p.Норма_порции) AS Расход_продукта1,
SUM(Расход_продукта1 * t.Цена) AS Стоимость_продукта
FROM Продукт s
JOIN Расходная_ведомость i
		ON s.ID = i.ID_продукта
	JOIN Порция p
		ON i.ID_продукта = p.ID_продукта
		AND i.ID_блюда = p.ID_блюда
			JOIN Поставка t
			ON i.ID_продукта = t.ID_продукта
GROUP BY i.Дата, s.Название ORDER BY Дата


SUM(Расход_продукта1 * t.Цена) - подчеркнуто красным. Пишет недопустимое имя столбца.

Я так рассуждал: Берешь вновь созданный столбец и умножаешь его на другой столбец, предварительно таблицы объединяешь по полю ID.

Что я не так делаю?
22 сен 16, 11:16    [19695466]     Ответить | Цитировать Сообщить модератору
 Re: Как суммировать данные в запросе?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
SELECT i.Дата, s.Название, SUM(i.Количество_порций * p.Норма_порции) AS Расход_продукта1,
SUM(i.Количество_порций * p.Норма_порции * t.Цена) AS Стоимость_продукта
FROM Продукт s
JOIN Расходная_ведомость i
		ON s.ID = i.ID_продукта
	JOIN Порция p
		ON i.ID_продукта = p.ID_продукта
		AND i.ID_блюда = p.ID_блюда
			JOIN Поставка t
			ON i.ID_продукта = t.ID_продукта
GROUP BY i.Дата, s.Название ORDER BY Дата
22 сен 16, 11:18    [19695476]     Ответить | Цитировать Сообщить модератору
 Re: Как суммировать данные в запросе?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Виктор27,

может книжку какую почитать? В этом месте sql не знает что вы там придумали за алиасы
SUM(i.Количество_порций * p.Норма_порции*t.Цена)
22 сен 16, 11:19    [19695487]     Ответить | Цитировать Сообщить модератору
 Re: Как суммировать данные в запросе?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Виктор27,

Каждое поле списка SELECTа формируется ОДНОВРЕМЕННО с остальными.
Поэтому алиас Расход_продукта1 неизвестен в последнем поле списка (Стоимость_продукта)
22 сен 16, 11:21    [19695506]     Ответить | Цитировать Сообщить модератору
 Re: Как суммировать данные в запросе?  [new]
Виктор27
Member

Откуда:
Сообщений: 31
Тьфу ты черт. Вы тыкайте, тыкайте меня носом))) Я хоть пойму как правильно. И читать я пытаюсь, но хотел больше попрактиковаться) Вроде пока все. "У меня все получилось" )))))))

Большущее спасибо.
22 сен 16, 11:26    [19695573]     Ответить | Цитировать Сообщить модератору
 Re: Как суммировать данные в запросе?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
мазохист
22 сен 16, 11:28    [19695591]     Ответить | Цитировать Сообщить модератору
 Re: Как суммировать данные в запросе?  [new]
buven
Member

Откуда:
Сообщений: 792
Виктор27
И читать я пытаюсь, но хотел больше попрактиковаться) )))))))

sql-ex - весьма мне помог в свое время. Очень хороший плавный переход от простого к сложному с исчерпывающими объяснениями, что к чему.
22 сен 16, 12:03    [19695938]     Ответить | Цитировать Сообщить модератору
 Re: Как суммировать данные в запросе?  [new]
Виктор27
Member

Откуда:
Сообщений: 31
buven, Благодарю. Обязательно посмотрю.
22 сен 16, 12:33    [19696118]     Ответить | Цитировать Сообщить модератору
 Re: Как суммировать данные в запросе?  [new]
Виктор27
Member

Откуда:
Сообщений: 31
Ребят, а подскажите как правильно передать параметр Даты в хранимую процедуру?

CREATE PROC Test
@s DATE, @po DATE
AS
SELECT Поставщик.Название, Продукт.Название, Дата_поставки, Поставка.Количество
FROM Поставка, Поставщик, Продукт
WHERE Дата_поставки > @s AND Дата_поставки < @po


EXECUTE Test 2016-09-17, 2016-09-18


Так подчеркивается красным.
22 сен 16, 12:41    [19696155]     Ответить | Цитировать Сообщить модератору
 Re: Как суммировать данные в запросе?  [new]
doos
Member

Откуда: Ленинградская обл.
Сообщений: 165
Виктор27,

'20160922'
22 сен 16, 12:43    [19696163]     Ответить | Цитировать Сообщить модератору
 Re: Как суммировать данные в запросе?  [new]
doos
Member

Откуда: Ленинградская обл.
Сообщений: 165
Виктор27,

только у вас не попадет 18 число в выборку
22 сен 16, 12:46    [19696173]     Ответить | Цитировать Сообщить модератору
 Re: Как суммировать данные в запросе?  [new]
Виктор27
Member

Откуда:
Сообщений: 31
doos
Виктор27,

'20160922'


В итоге пустая таблица
EXECUTE Test '2016-09-16', '2016-09-22'

и так пустая
EXECUTE Test '20160916', '20160922'
22 сен 16, 12:59    [19696231]     Ответить | Цитировать Сообщить модератору
 Re: Как суммировать данные в запросе?  [new]
doos
Member

Откуда: Ленинградская обл.
Сообщений: 165
Виктор27,

Попробуйте

WHERE Дата_поставки BETWEEN @s AND @po
22 сен 16, 13:01    [19696241]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить