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

Откуда:
Сообщений: 111
Есть скрипт:
declare  @SomeTable TABLE(
Country  char(50) not null,
City    char(50) not null,
Rete	int not null,
Suma	int not null,
Number	int not null
) 
insert into @SomeTable (Country,	City,		Rete, Suma,	Number)
values			('Россия', 'Москва',		1, 	200, 	1),
			('Россия', 'Москва',		2, 	1000, 	1),
			('Россия', 'Москва',		1, 	300, 	1),
			('Россия', 'Москва',		1, 	500, 	1),
			('Россия', 'Москва',		3, 	300, 	1),
			('Россия', 'Санкт-Петербург',	2, 	100, 	1),
			('Россия', 'Санкт-Петербург',	1, 	200, 	1),
			('Россия', 'Екатеринбург',	2, 	600, 	1),
			('Россия', 'Екатеринбург',	1, 	200, 	1),
			('Украина', 'Одесса',		1, 	200, 	1),
			('Украина', 'Одесса',		2, 	100, 	1),
			('Украина', 'Одесса',		1, 	200, 	1),
			('Украина', 'Одесса',		3, 	200, 	1),
			('Украина', 'Киев',		1, 	400, 	1),
			('Украина', 'Киев',		2, 	800, 	1);
SELECT   s.Country
	,s.City
	,Count(CASE	WHEN Rete = 1	THEN 1 END ) AS CountRete1
	,SUM(CASE	WHEN Rete = 1	THEN suma END )	AS SummaRete1
	,Count(CASE	WHEN Rete = 2	THEN 1 END ) AS CountRete2
	,SUM(CASE	WHEN Rete = 2	THEN suma END )	AS SummaRete2
	,Count(CASE	WHEN Rete = 2	THEN 1 END ) AS CountRete3
	,SUM(CASE	WHEN Rete = 2	THEN suma END )	AS SummaRete3
FROM @SomeTable S
GROUP BY s.country
	,s.city
	,s.Rete


Результат получаю такой как надо, но есть вопрос: можно ли этот запрос переписать по-другому с использованием PIVOT . Я пробовал так но не знаю как поля CountRete вывести
SELECT *
FROM (	SELECT   s.Country
		,s.City
		,s.Rete
		,SUM(s.suma)	AS Summa
	FROM @SomeTable S
	GROUP BY s.country
		,s.city
		,s.rete
) AS S
PIVOT (SUM(Summa) FOR Rete in ([1],[2], [3]) ) AS U
18 ноя 13, 15:02    [15148714]     Ответить | Цитировать Сообщить модератору
 Re: Оператор pivot  [new]
iap
Member

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

PIVOT ни к чему.
А вот COUNT я бы заменил на SUM(CASE ... WHEN ... THEN 1 ELSE 0 END).
Зачем нужны сообщения о том, что сервер проигнорировал NULLы в агрегатной функции?
18 ноя 13, 15:20    [15148851]     Ответить | Цитировать Сообщить модератору
 Re: Оператор pivot  [new]
Glory
Member

Откуда:
Сообщений: 104751
MaxiMaxiM
Я пробовал так но не знаю как поля CountRete вывести

Никак. PIVOT работает только с одним агрегатом
18 ноя 13, 15:29    [15148926]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить