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

Откуда:
Сообщений: 1
Помогите пожалуйста, не могу сообразить как написать два запроса.
Есть две таблицы:
table1
ID1* Caregory
1____|Красный
2____|Зеленый
3____|Синий
4____|Желтый

table2
ID2* Product ID1(FK)
1_____|A|______1
2_____|B|______ 1
3_____|D|______1
4_____|F|______3
5_____|G|______4
6_____|S|______4

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

2) Добавить к таблице из п.1 столбец "Наличие", принимающий значения:
"Кончился", если кол-во товара для данной категории равно 0;
"Заканчивается", если кол-во товара для данной категории меньше 2;
"В наличии", во всех остальных случаях.
1 сен 12, 18:45    [13099703]     Ответить | Цитировать Сообщить модератору
 Re: Вывести количество продуктов по категориям?  [new]
rector
Member

Откуда: Киев
Сообщений: 57
mykvi,


CREATE TABLE  #table1(
 id INT IDENTITY,
 category VARCHAR (50)	
)

CREATE TABLE #table2 (
	id INT IDENTITY,
	product VARCHAR (50),
	CategoryId int	
)

INSERT INTO #table1 (category)
SELECT 'Red'
UNION ALL
select 'Green'
UNION ALL
SELECT 'Blue'
UNION ALL
SELECT 'Yellow'


INSERT INTO #table2 (product,CategoryId)
SELECT 'A', 1
UNION ALL
SELECT 'B', 1
UNION ALL
SELECT 'D', 1
UNION ALL
SELECT 'F',3
UNION ALL
SELECT 'G', 4
UNION ALL
SELECT 'S', 4



SELECT TTT.Category, isnull (MAX(ROW), 0) 
FROM
(SELECT 
		t1.id,
		t1.category AS Category,
		ROW_NUMBER ()  OVER(PARTITION BY category order by t1.category  ) AS Row
FROM #table2 t
JOIN #table1 t1 ON t.CategoryId=t1.id   
) TT
right JOIN #table1 ttt ON ttt.id = TT.id
GROUP BY TTT.category

SELECT TTT.Category, isnull (MAX(ROW), 0),
		CASE 
		WHEN  isnull (MAX(ROW), 0) =0 THEN N'Кончился'
		WHEN isnull (MAX(ROW), 0) <2 THEN N'Заканчивается'
		ELSE N'В наличии'
		end
FROM
(SELECT 
		t1.id,
		t1.category AS Category,
		ROW_NUMBER ()  OVER(PARTITION BY category order by t1.category  ) AS Row
FROM #table2 t
JOIN #table1 t1 ON t.CategoryId=t1.id   
) TT
right JOIN #table1 ttt ON ttt.id = TT.id
GROUP BY TTT.category
1 сен 12, 19:44    [13099820]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить