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

Откуда:
Сообщений: 4
Есть следующий запрос, который выводит сколько единиц каждого товара высталено на продажу:
Код SQL
SELECT RESULT.Название, RESULT.Единица_измерения, RESULT.[Количество единиц товаров каждого вида]
FROM
    (
    SELECT Товар.Название, SUM(([Партия_товаров].[Количество_товаров])) AS [Количество единиц товаров каждого вида], Товар.[Единица_измерения]
    FROM Товар JOIN Партия_товаров JOIN Партии ON Партии.ПартииПК = Партия_товаров.ПартииВК ON Товар.ТоварПК = Партия_товаров.ТоварВК 
    WHERE (((Партии.[Начало_торга])<'21.12.2013'))
    GROUP BY Товар.Название, Товар.[Единица_измерения]
    ) AS RESULT ;

Необходимо из этой таблицы выбрать самый ходовой товар в натуральном исчислении. То есть найти товар, который поставлялся больше остальных в литрах, штуках и т.д. Как можно это сделать?
нужно получить следующие результаты:
Вода минеральная - литр - 200
Чай черный цейлонский - пакет - 100
Конфеты "Вечерний киев" - упаковка - 60
Мороженное - шт - 100.

К сообщению приложен файл. Размер - 13Kb
24 ноя 13, 19:37    [15181988]     Ответить | Цитировать Сообщить модератору
 Re: Найти максимальное значение по категориям  [new]
qwerty112
Guest
Prostoplus
найти товар, который поставлялся больше остальных в литрах, штуках и т.д

SELECT top 1 with ties RESULT.Название, RESULT.Единица_измерения, RESULT.[Количество единиц товаров каждого вида], RESULT.[Единица_измерения]
FROM
    (
    SELECT Товар.Название, SUM(([Партия_товаров].[Количество_товаров])) AS [Количество единиц товаров каждого вида], Товар.[Единица_измерения]
    FROM Товар JOIN Партия_товаров JOIN Партии ON Партии.ПартииПК = Партия_товаров.ПартииВК ON Товар.ТоварПК = Партия_товаров.ТоварВК 
    WHERE (((Партии.[Начало_торга])<'21.12.2013'))
    GROUP BY Товар.Название, Товар.[Единица_измерения]
    ) AS RESULT 
order by row_number()over(partition by RESULT.[Единица_измерения] order by RESULT.[Количество единиц товаров каждого вида] desc)
24 ноя 13, 20:27    [15182146]     Ответить | Цитировать Сообщить модератору
 Re: Найти максимальное значение по категориям  [new]
Prostoplus
Member

Откуда:
Сообщений: 4
qwerty112, спасибо большое, работает.
Мой вариант был таков:
DECLARE @ENDdate datetime;
SET @ENDdate = '21.12.2013';

if object_id('tempdb..#t') is not null 
	drop table #t

CREATE TABLE #t (Название nvarchar(60), ЕдиницаИзмерения nvarchar(10), Количество int);

INSERT INTO #t
SELECT RESULT.Название, RESULT.Единица_измерения, RESULT.[Количество единиц товаров каждого вида]
FROM
    (
    SELECT Товар.Название, SUM(([Партия_товаров].[Количество_товаров])) AS [Количество единиц товаров каждого вида], Товар.[Единица_измерения]
    FROM Товар JOIN Партия_товаров JOIN Партии ON Партии.ПартииПК = Партия_товаров.ПартииВК ON Товар.ТоварПК = Партия_товаров.ТоварВК 
    WHERE (((Партии.[Начало_торга])<@ENDdate))
    GROUP BY Товар.Название, Товар.[Единица_измерения]
    ) AS RESULT
GO
SELECT #t.Название, #t.ЕдиницаИзмерения, #t.Количество
FROM #t 
WHERE #t.Количество IN (
						SELECT MAX(R.Количество)
						FROM #t AS R
						GROUP BY R.ЕдиницаИзмерения
						)
AND #t.ЕдиницаИзмерения IN (
							SELECT DISTINCT R.ЕдиницаИзмерения
							FROM
							#t AS R
							GROUP BY R.ЕдиницаИзмерения
							)
;

Только вот сейчас стал работать некорректно - выводит лишнее :
Вода минеральная литр 200
Сок яблочный литр 60 ---- НЕ ДОЛЖЕН ВЫВОДИТЬ ----
Чай черный цейлонский пакет 100
Конфеты "Вечерний киев" упаковка 60
Мороженное шт 100
25 ноя 13, 22:30    [15188240]     Ответить | Цитировать Сообщить модератору
 Re: Найти максимальное значение по категориям  [new]
Prostoplus
Member

Откуда:
Сообщений: 4
Теперь понял, почему мой вариант был неверен.
25 ноя 13, 22:42    [15188273]     Ответить | Цитировать Сообщить модератору
 Re: Найти максимальное значение по категориям  [new]
Prostoplus
Member

Откуда:
Сообщений: 4
Теперь понял, почему мой вариант работает не корректно.
25 ноя 13, 22:48    [15188292]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить