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

Откуда: Харьков
Сообщений: 30
По сабжу: была задача реализовать хранимую процедуру для вывода поставленного товара, количество и суммы поставки (за январь и март). Задача в принципе решена, только проблема в том, что один и тот же товар поставлялся по разным ценам и следовательно один и тот же товар выводится несколько раз. Не подскажите как реализовать, чтобы товар выводился только один раз. DISTINCT не помогает
+
ALTER PROCEDURE [dbo].[tovar]
      @var1 datetime,
	  @var2 datetime,
	  @var3 datetime,
	  @var4 datetime	  
AS
BEGIN 
   SET NOCOUNT ON
   SELECT DISTINCT Договоры.код_договора,  Продукция.название_продукции, SUM(Поставленная_продукция.количество) AS Количество,
   Поставленная_продукция.цена_за_единицу, SUM(количество*цена_за_единицу)
      FROM Договоры  INNER JOIN  Продукция ON Продукция.название_продукции=[Продукция].[название_продукции] INNER JOIN
	   Поставленная_продукция ON Поставленная_продукция.количество =[Поставленная_продукция].[количество]
WHERE (дата_поставки BETWEEN @var1 AND @var2 OR дата_поставки BETWEEN @var3 AND @var4)  AND (цена_за_единицу BETWEEN 20 AND 2000)

GROUP BY Договоры.код_договора, дата_поставки, Продукция.название_продукции, Поставленная_продукция.количество,
Поставленная_продукция.цена_за_единицу	        
END


Вот результат моей процедуры
[url=]https://dl.dropboxusercontent.com/u/90254390/12.png[/url]

К сообщению приложен файл. Размер - 22Kb
28 май 14, 13:39    [16085152]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать повторяющиеся значения из процедуры.  [new]
Glory
Member

Откуда:
Сообщений: 104751
amnesiac
Не подскажите как реализовать, чтобы товар выводился только один раз.

Т.е. поля Количествоб Цена за единицу и Отсутствует имя столбца вам не нужны ?
28 май 14, 13:42    [16085163]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать повторяющиеся значения из процедуры.  [new]
Добрый Э - Эх
Guest
и какую из разных цен ты желаешь видеть в итоге?
28 май 14, 13:42    [16085168]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать повторяющиеся значения из процедуры.  [new]
amnesiac
Member

Откуда: Харьков
Сообщений: 30
Glory
amnesiac
Не подскажите как реализовать, чтобы товар выводился только один раз.

Т.е. поля Количествоб Цена за единицу и Отсутствует имя столбца вам не нужны ?


Цена за единицу в принципе не нужна. Нужны поля: код договора, название (один раз), количество и сумма поставки (я забыл просто имя присвоить)
28 май 14, 13:45    [16085193]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать повторяющиеся значения из процедуры.  [new]
Glory
Member

Откуда:
Сообщений: 104751
amnesiac
количество

И какое из 7ми разных Количеств должно быть показано для Bosh WAS 24440 ?
28 май 14, 13:47    [16085201]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать повторяющиеся значения из процедуры.  [new]
amnesiac
Member

Откуда: Харьков
Сообщений: 30
Glory
amnesiac
количество

И какое из 7ми разных Количеств должно быть показано для Bosh WAS 24440 ?


их сумма. Например: Bosh WAS 24440 Количество: 234 штуки Общая стоимость: такая-то
28 май 14, 13:50    [16085234]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать повторяющиеся значения из процедуры.  [new]
Glory
Member

Откуда:
Сообщений: 104751
amnesiac
их сумма.

Если нужна сумма по полю, то почему тогда это поле указано еще и в GROUP BY ?
28 май 14, 13:51    [16085253]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать повторяющиеся значения из процедуры.  [new]
amnesiac
Member

Откуда: Харьков
Сообщений: 30
Glory
amnesiac
их сумма.

Если нужна сумма по полю, то почему тогда это поле указано еще и в GROUP BY ?

да, действительно. Исправил, но все равно поле количество не суммируется

К сообщению приложен файл. Размер - 19Kb
28 май 14, 14:00    [16085327]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать повторяющиеся значения из процедуры.  [new]
Glory
Member

Откуда:
Сообщений: 104751
amnesiac
Исправил, но все равно поле количество не суммируется

Потому что опять присутствует поле, которое разное для разных записей.
Неужели непонятно ?
28 май 14, 14:01    [16085340]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать повторяющиеся значения из процедуры.  [new]
user89
Member

Откуда:
Сообщений: 2083
amnesiac,

???
SELECT Договоры.код_договора,  Продукция.название_продукции, SUM(Поставленная_продукция.количество) AS Количество, SUM(количество*цена_за_единицу)
FROM Договоры  INNER JOIN  Продукция ON Продукция.название_продукции=[Продукция].[название_продукции] INNER JOIN
Поставленная_продукция ON Поставленная_продукция.количество =[Поставленная_продукция].[количество]
WHERE (дата_поставки BETWEEN @var1 AND @var2 OR дата_поставки BETWEEN @var3 AND @var4)  AND (цена_за_единицу BETWEEN 20 AND 2000)
GROUP BY Договоры.код_договора,  Продукция.название_продукции
28 май 14, 14:05    [16085370]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать повторяющиеся значения из процедуры.  [new]
amnesiac
Member

Откуда: Харьков
Сообщений: 30
Glory
amnesiac
Исправил, но все равно поле количество не суммируется

Потому что опять присутствует поле, которое разное для разных записей.
Неужели непонятно ?

эммм..нужно убрать вывод поля "цена за единицу"? Если вы это имели ввиду, то тот же результат..или я не о том думаю...натолкните на мысль пожалуйста ..
28 май 14, 14:07    [16085389]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать повторяющиеся значения из процедуры.  [new]
Glory
Member

Откуда:
Сообщений: 104751
amnesiac
Если вы это имели ввиду, то тот же результат..

Мля.
Потому что ненужные поля нужно убирать из всех мест запроса
28 май 14, 14:09    [16085410]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать повторяющиеся значения из процедуры.  [new]
amnesiac
Member

Откуда: Харьков
Сообщений: 30
Glory
amnesiac
Если вы это имели ввиду, то тот же результат..

Мля.
Потому что ненужные поля нужно убирать из всех мест запроса


да-да..затупил...спасибо большое
Но все же проблема с выводом товара осталась. Опять же один и тот же товар много раз выводится..

К сообщению приложен файл. Размер - 20Kb
28 май 14, 14:12    [16085437]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать повторяющиеся значения из процедуры.  [new]
Glory
Member

Откуда:
Сообщений: 104751
amnesiac
Опять же один и тот же товар много раз выводится..

Потому что кто-то продолжает тупить
28 май 14, 14:14    [16085448]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать повторяющиеся значения из процедуры.  [new]
amnesiac
Member

Откуда: Харьков
Сообщений: 30
Glory
amnesiac
Опять же один и тот же товар много раз выводится..

Потому что кто-то продолжает тупить

что-то вы меня вообще в тупик завели(
28 май 14, 14:30    [16085564]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать повторяющиеся значения из процедуры.  [new]
Glory
Member

Откуда:
Сообщений: 104751
amnesiac
что-то вы меня вообще в тупик завели(

Потому что 3ий раз спрашивать одно и тоже - это уже клиника
Поля в запросе уже скоро закончатся.
28 май 14, 14:32    [16085572]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать повторяющиеся значения из процедуры.  [new]
user89
Member

Откуда:
Сообщений: 2083
amnesiac,

SELECT Договоры.код_договора,  Продукция.название_продукции
from Таблица
GROUP BY Договоры.код_договора,  Продукция.название_продукции
равняется
SELECT distinct Договоры.код_договора,  Продукция.название_продукции
from Таблица


В группе нет повторяющихся значений. На Вашей картинке это наглядно показано. Попробуйте так:
SELECT Договоры.код_договора,  SUM(Поставленная_продукция.количество) AS Количество, SUM(количество*цена_за_единицу)
FROM Договоры  INNER JOIN  Продукция ON Продукция.название_продукции=[Продукция].[название_продукции] INNER JOIN
Поставленная_продукция ON Поставленная_продукция.количество =[Поставленная_продукция].[количество]
WHERE (дата_поставки BETWEEN @var1 AND @var2 OR дата_поставки BETWEEN @var3 AND @var4)  AND (цена_за_единицу BETWEEN 20 AND 2000)
GROUP BY Договоры.код_договора
28 май 14, 14:34    [16085590]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать повторяющиеся значения из процедуры.  [new]
Glory
Member

Откуда:
Сообщений: 104751
user89
В группе нет повторяющихся значений. На Вашей картинке это наглядно показано

Есть. На втором скриншоте
28 май 14, 14:36    [16085596]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать повторяющиеся значения из процедуры.  [new]
user89
Member

Откуда:
Сообщений: 2083
Glory,

ОК, я просто не так выразился...
28 май 14, 14:39    [16085622]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать повторяющиеся значения из процедуры.  [new]
amnesiac
Member

Откуда: Харьков
Сообщений: 30
user89
amnesiac,

SELECT Договоры.код_договора,  Продукция.название_продукции
from Таблица
GROUP BY Договоры.код_договора,  Продукция.название_продукции
равняется
SELECT distinct Договоры.код_договора,  Продукция.название_продукции
from Таблица


В группе нет повторяющихся значений. На Вашей картинке это наглядно показано. Попробуйте так:
SELECT Договоры.код_договора,  SUM(Поставленная_продукция.количество) AS Количество, SUM(количество*цена_за_единицу)
FROM Договоры  INNER JOIN  Продукция ON Продукция.название_продукции=[Продукция].[название_продукции] INNER JOIN
Поставленная_продукция ON Поставленная_продукция.количество =[Поставленная_продукция].[количество]
WHERE (дата_поставки BETWEEN @var1 AND @var2 OR дата_поставки BETWEEN @var3 AND @var4)  AND (цена_за_единицу BETWEEN 20 AND 2000)
GROUP BY Договоры.код_договора

так то оно так, но нет вывода названия. Нужно именно название товара
28 май 14, 15:25    [16086073]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать повторяющиеся значения из процедуры.  [new]
user89
Member

Откуда:
Сообщений: 2083
amnesiac,

тогда выведем его
SELECT Продукция.название_продукции, SUM(Поставленная_продукция.количество) AS Количество, SUM(количество*цена_за_единицу)
FROM Договоры  INNER JOIN  Продукция ON Продукция.название_продукции=[Продукция].[название_продукции] INNER JOIN
Поставленная_продукция ON Поставленная_продукция.количество =[Поставленная_продукция].[количество]
WHERE (дата_поставки BETWEEN @var1 AND @var2 OR дата_поставки BETWEEN @var3 AND @var4)  AND (цена_за_единицу BETWEEN 20 AND 2000)
GROUP BY Продукция.название_продукции
28 май 14, 15:31    [16086122]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать повторяющиеся значения из процедуры.  [new]
amnesiac
Member

Откуда: Харьков
Сообщений: 30
user89
amnesiac,

тогда выведем его
SELECT Продукция.название_продукции, SUM(Поставленная_продукция.количество) AS Количество, SUM(количество*цена_за_единицу)
FROM Договоры  INNER JOIN  Продукция ON Продукция.название_продукции=[Продукция].[название_продукции] INNER JOIN
Поставленная_продукция ON Поставленная_продукция.количество =[Поставленная_продукция].[количество]
WHERE (дата_поставки BETWEEN @var1 AND @var2 OR дата_поставки BETWEEN @var3 AND @var4)  AND (цена_за_единицу BETWEEN 20 AND 2000)
GROUP BY Продукция.название_продукции


видимо я на жаре перегрелся))) настолько все просто

огромное спасибо! Пойду дальше мучать t-sql)
28 май 14, 15:42    [16086207]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить