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

Откуда:
Сообщений: 22
Здравствуйте,

Есть запрос, который выводит все строки заказов:
SELECT Material.Number
      ,SalesOrderItem.Quantity
	  ,Material.ImportCode
	  ,Material.NetWeight
	  ,Material.GrossWeight
  FROM [DWH_Dev2].[dbo].[SalesOrderItem]
  INNER JOIN [dbo].Material ON [dbo].Material.MaterialID = [dbo].SalesOrderItem.MaterialID


Как вывести товар + общее количество для каждого артикула?
7 сен 17, 11:43    [20777996]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать товар  [new]
Добрый Э - Эх
Guest
user8474542,

count(товар) over(partition by артикул)
7 сен 17, 11:57    [20778059]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать товар  [new]
vladislav109
Member

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

 SELECT Material.Number
      ,SUM(SalesOrderItem.Quantity) AS [Общее количество]
 FROM [DWH_Dev2].[dbo].[SalesOrderItem]
 INNER JOIN [dbo].Material ON [dbo].Material.MaterialID = [dbo].SalesOrderItem.MaterialID
 GROUP BY Material.Number
7 сен 17, 11:57    [20778060]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать товар  [new]
Добрый Э - Эх
Guest
хотя, возможно
Добрый Э - Эх
user8474542,

SUM(товар) over(partition by артикул)
или ещё что-то.... короче, задачу уточни, а то постановка больно уж расплывчатая.
7 сен 17, 11:59    [20778074]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать товар  [new]
vladislav109
Member

Откуда:
Сообщений: 69
Добрый Э - Эх,
Скорее всего да, т.к. в SalesOrderItem.Quantity уже видимо хранится количество.
Тоже первая мысль была об оконной функции
7 сен 17, 12:04    [20778114]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать товар  [new]
user8474542
Member

Откуда:
Сообщений: 22
Строчки с артикулом не уникальны, так как мы обращаемся к таблице строк заказов. Поэтому вариант предложенный vladislav109 не совсем верный.

Задача именно вывести уникальные артикулы и подсчитать общее количество, т.е. сложить SalesOrderItem.Quantity для каждого уникального Material.Number
7 сен 17, 12:05    [20778123]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать товар  [new]
user8474542
Member

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

count(SalesOrderItem.Quantity) over (PARTITION by material.number)


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

Например, товар1 подсчитало 30шт, как результат выводится 30 строк. В чем можем быть проблема?
7 сен 17, 12:19    [20778177]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать товар  [new]
vladislav109
Member

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

COUNT заменить на SUM
Выше же писали
7 сен 17, 12:24    [20778199]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать товар  [new]
user8474542
Member

Откуда:
Сообщений: 22
Честно говоря такая же простыня, куча дублирующих строк...
7 сен 17, 12:27    [20778204]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать товар  [new]
Добрый Э - Эх
Guest
user8474542,

используй GROUP BY. в качестве агрегата - COUNT и будет тебе счастье.
7 сен 17, 12:35    [20778231]     Ответить | Цитировать Сообщить модератору
 Re: Подсчитать товар  [new]
user8474542
Member

Откуда:
Сообщений: 22
COUNT здесь почему то некорректно работает, SUM - правильно.

Ошибка была в том что забыл указать DISTINCT.

Верно так:
SELECT 
DISTINCT Material.Number
,sum(SalesOrderItem.Quantity) OVER(PARTITION by material.number order by material.number)
7 сен 17, 12:54    [20778316]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить