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

Откуда:
Сообщений: 1197
Есть таблица
Cars
(
  PrevWin,
  PrevPrice,
  NewWin,
  NewPrice
)


нужно получить SUM(PrevPrice + NewPrice) c уникальным Win.

задача написать такой селект, чтобы это можно было запихнуть в индексированное представление и сделать индекс.
сейчас у меня получается только с FULL JOIN
21 май 15, 16:23    [17672495]     Ответить | Цитировать Сообщить модератору
 Re: SUM по нескольким полям  [new]
Glory
Member

Откуда:
Сообщений: 104751
relief
сейчас у меня получается только с FULL JOIN

Какой нафиг FULL JOIN ? С чем ?

Сообщение было отредактировано: 21 май 15, 16:25
21 май 15, 16:25    [17672514]     Ответить | Цитировать Сообщить модератору
 Re: SUM по нескольким полям  [new]
relief
Member

Откуда:
Сообщений: 1197
Glory
relief
сейчас у меня получается только с FULL JOIN

Какой нафиг FULL JOIN ? С чем ?


у меня 2 селекта

count(*), PrevWin
group by PrevWin


count(*), NewWin
group by NewWin

и потом FULL джойн по PrevWin = NewWin
и беру COALESCE(PrevWin, NewWin)
21 май 15, 16:32    [17672567]     Ответить | Цитировать Сообщить модератору
 Re: SUM по нескольким полям  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2415
relief
у меня 2 селекта

вот неужто не легче сразу привести скрипты создания таблиц и свой скрипт? чем по сто раз "молча на пальцах" объяснять?
21 май 15, 17:38    [17672973]     Ответить | Цитировать Сообщить модератору
 Re: SUM по нескольким полям  [new]
a_voronin
Member

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

А это не то, что требуется?

SELECT  SUM(ISNULL(PrevPrice, 0) + ISNULL(NewPrice, 0))
FROM CARS
GROUP BY NewWin
21 май 15, 17:39    [17672978]     Ответить | Цитировать Сообщить модератору
 Re: SUM по нескольким полям  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
relief
Есть таблица
Cars
(
  PrevWin,
  PrevPrice,
  NewWin,
  NewPrice
)


нужно получить SUM(PrevPrice + NewPrice) c уникальным Win.

задача написать такой селект, чтобы это можно было запихнуть в индексированное представление и сделать индекс.
сейчас у меня получается только с FULL JOIN


А понял!!! Версия SQL не 2012? LAG / LEAD тогда иначе FULL JOIN
21 май 15, 17:41    [17672995]     Ответить | Цитировать Сообщить модератору
 Re: SUM по нескольким полям  [new]
relief
Member

Откуда:
Сообщений: 1197
StarikNavy
relief
у меня 2 селекта

вот неужто не легче сразу привести скрипты создания таблиц и свой скрипт? чем по сто раз "молча на пальцах" объяснять?


  CREATE TABLE #Cars 
  (
	PrevWin VARCHAR(10),
	PrevPrice INT,
	NewWin VARCHAR(10),
	NewPrice INT
  )

  INSERT #Cars SELECT '111', 100, NULL, NULL
  INSERT #Cars SELECT NULL, NULL, '111', 100


Нужно сделать индексированное представление, чтобы в нем получить одну строку '111', 200
22 май 15, 08:58    [17674477]     Ответить | Цитировать Сообщить модератору
 Re: SUM по нескольким полям  [new]
relief
Member

Откуда:
Сообщений: 1197
a_voronin
relief,

А это не то, что требуется?

SELECT  SUM(ISNULL(PrevPrice, 0) + ISNULL(NewPrice, 0))
FROM CARS
GROUP BY NewWin


это не будет работать - смотрите мой пример.
нужно без full join чтобы создать индекс на представление
22 май 15, 08:59    [17674486]     Ответить | Цитировать Сообщить модератору
 Re: SUM по нескольким полям  [new]
Glory
Member

Откуда:
Сообщений: 104751
relief
нужно без full join чтобы создать индекс на представление

full join - это не единственная запрещенная конструкция в индексированных представлениях
22 май 15, 09:04    [17674513]     Ответить | Цитировать Сообщить модератору
 Re: SUM по нескольким полям  [new]
relief
Member

Откуда:
Сообщений: 1197
Glory
relief
нужно без full join чтобы создать индекс на представление

full join - это не единственная запрещенная конструкция в индексированных представлениях


я в курсе.
т.е. варианта создать индексированное вью по моей задаче нет?
22 май 15, 09:06    [17674529]     Ответить | Цитировать Сообщить модератору
 Re: SUM по нескольким полям  [new]
Glory
Member

Откуда:
Сообщений: 104751
relief
т.е. варианта создать индексированное вью по моей задаче нет?

Ну если вы соблюдете _все_ условия необходимые для создания такого представления, то тогда и создадите такое представление
22 май 15, 09:08    [17674542]     Ответить | Цитировать Сообщить модератору
 Re: SUM по нескольким полям  [new]
a_voronin
Member

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

У вас вообще какая версия сервера?
22 май 15, 14:52    [17677100]     Ответить | Цитировать Сообщить модератору
 Re: SUM по нескольким полям  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
relief
StarikNavy
пропущено...

вот неужто не легче сразу привести скрипты создания таблиц и свой скрипт? чем по сто раз "молча на пальцах" объяснять?


  CREATE TABLE #Cars 
  (
	PrevWin VARCHAR(10),
	PrevPrice INT,
	NewWin VARCHAR(10),
	NewPrice INT
  )

  INSERT #Cars SELECT '111', 100, NULL, NULL
  INSERT #Cars SELECT NULL, NULL, '111', 100


Нужно сделать индексированное представление, чтобы в нем получить одну строку '111', 200


Как-то так (я заменил на постоянную таблицу)?
create view  vCars
with schemabinding
as
select Coalesce(PrevWin,NewWin) as Win , SUM(isnull(PrevPrice, 0) + ISNULL(NewPrice, 0)) as Price, COUNT_BIG(*) as CountBIG
from dbo._#Cars
group by Coalesce(PrevWin,NewWin) 
GO
22 май 15, 15:07    [17677236]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить