Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Ругается на over - partition by - order by  [new]
vasiliusis
Member

Откуда:
Сообщений: 58
Добрый день, товарищи. Вводная: в таблице хранится список, например, карандашей, которых может быть несколько штук одного цвета, но разной мягкости: 3 - желтых, 5 - зеленых, 2 - черных и т.д. (пример абстрактный)

Нужно посчитать, сколько карандашей имеется конкретного цвета без использования group by, НО с использованием over - partition by - order by


Написан вот такой запрос:

select Color,   -- цвет
count(PenId) over (partition by Color order by PenId) 
from PenTable



и ничего... пишет "Неправильный синтаксис около конструкции "order". " . Кто сталкивался? Согласно msdn order by в данном выражении МОЖЕТ быть на моей версии Ms sql 2008 r2

OVER ( 
       [ <PARTITION BY clause> ]
       [ <ORDER BY clause> ] 
       [ <ROW or RANGE clause> ]
      ) 


Что ему требуется?
4 май 16, 11:46    [19132693]     Ответить | Цитировать Сообщить модератору
 Re: Ругается на over - partition by - order by  [new]
Glory
Member

Откуда:
Сообщений: 104751
vasiliusis
Что ему требуется?

Наверное хочет такую версию сервера, в которой этот синтаксис есть
4 май 16, 11:47    [19132703]     Ответить | Цитировать Сообщить модератору
 Re: Ругается на over - partition by - order by  [new]
_djХомяГ
Guest
SUM() OVER (ORDER BY)
4 май 16, 11:52    [19132738]     Ответить | Цитировать Сообщить модератору
 Re: Ругается на over - partition by - order by  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Насколько я помню агрегатные оконные функции появились в 2012 версии. До этого были только ROW_NUMBER, NTILE и прочие товарищи по лагерю
4 май 16, 11:52    [19132745]     Ответить | Цитировать Сообщить модератору
 Re: Ругается на over - partition by - order by  [new]
vasiliusis
Member

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

если бы, да в мануале написано

автор
Применимо для следующих объектов: SQL Server (SQL Server 2008 по текущую версию), База данных SQL Windows Azure (С первоначального выпуска по текущий выпуск).
4 май 16, 11:53    [19132749]     Ответить | Цитировать Сообщить модератору
 Re: Ругается на over - partition by - order by  [new]
iap
Member

Откуда: Москва
Сообщений: 47195
vasiliusis
Что ему требуется?
Ему требуется, чтобы ORDER BY в COUNT()OVER() не писали.
Ибо в вашей версии сервер не знает, что с ним делать.
4 май 16, 11:53    [19132751]     Ответить | Цитировать Сообщить модератору
 Re: Ругается на over - partition by - order by  [new]
_djХомяГ
Guest
AlanDenton
Насколько я помню агрегатные оконные функции появились в 2012 версии. До этого были только ROW_NUMBER, NTILE и прочие товарищи по лагерю

Это называется фрейминг и он действительно с 2012
4 май 16, 11:53    [19132754]     Ответить | Цитировать Сообщить модератору
 Re: Ругается на over - partition by - order by  [new]
iap
Member

Откуда: Москва
Сообщений: 47195
AlanDenton
Насколько я помню агрегатные оконные функции появились в 2012 версии. До этого были только ROW_NUMBER, NTILE и прочие товарищи по лагерю
В SQL2005.
Но они не допускали ORDER BY в OVER()
4 май 16, 11:54    [19132760]     Ответить | Цитировать Сообщить модератору
 Re: Ругается на over - partition by - order by  [new]
o-o
Guest
vasiliusis
Согласно msdn order by в данном выражении МОЖЕТ быть на моей версии Ms sql 2008 r2

там написано, что over ... order by в Ranking Window functions поддерживается,
а в Aggregate нет, только over ... partition by.
ваш вариант требует версии >= 2012

К сообщению приложен файл. Размер - 17Kb
4 май 16, 11:54    [19132765]     Ответить | Цитировать Сообщить модератору
 Re: Ругается на over - partition by - order by  [new]
Glory
Member

Откуда:
Сообщений: 104751
vasiliusis
если бы, да в мануале написано

автор
Применимо для следующих объектов: SQL Server (SQL Server 2008 по текущую версию), База данных SQL Windows Azure (С первоначального выпуска по текущий выпуск).

А мануал как версию вашего сервера задает ?
4 май 16, 11:54    [19132766]     Ответить | Цитировать Сообщить модератору
 Re: Ругается на over - partition by - order by  [new]
vasiliusis
Member

Откуда:
Сообщений: 58
_djХомяГ,

жаль.....
4 май 16, 11:55    [19132768]     Ответить | Цитировать Сообщить модератору
 Re: Ругается на over - partition by - order by  [new]
vasiliusis
Member

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

все,понял вопрос снят по ссылке, предоставленной хомяком
4 май 16, 11:56    [19132775]     Ответить | Цитировать Сообщить модератору
 Re: Ругается на over - partition by - order by  [new]
iap
Member

Откуда: Москва
Сообщений: 47195
vasiliusis
_djХомяГ,

жаль.....
А зачем вам понадобилось COUNT(*) OVER(PARTITION BY ... ORDER BY ...)?
Что вы хотели этим получить? Что-то не понял...
4 май 16, 11:57    [19132782]     Ответить | Цитировать Сообщить модератору
 Re: Ругается на over - partition by - order by  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
iap
В SQL2005. Но они не допускали ORDER BY в OVER()

В смысле? ORDER BY в оконных функциях можно было использовать как только они появились в 2005 версии. Хотя возможно, я не понял о чем Вы.
4 май 16, 11:57    [19132788]     Ответить | Цитировать Сообщить модератору
 Re: Ругается на over - partition by - order by  [new]
iap
Member

Откуда: Москва
Сообщений: 47195
AlanDenton
iap
В SQL2005. Но они не допускали ORDER BY в OVER()

В смысле? ORDER BY в оконных функциях можно было использовать как только они появились в 2005 версии. Хотя возможно, я не понял о чем Вы.

AlanDenton
Насколько я помню агрегатные оконные функции появились в 2012 версии.
4 май 16, 12:01    [19132807]     Ответить | Цитировать Сообщить модератору
 Re: Ругается на over - partition by - order by  [new]
o-o
Guest
iap
vasiliusis
_djХомяГ,

жаль.....
А зачем вам понадобилось COUNT(*) OVER(PARTITION BY ... ORDER BY ...)?
Что вы хотели этим получить? Что-то не понял...

ну например берем многодетного отца
и считаем кол-во его детей в разрезе лет.
т.е. в таблице записаны ДР, фио ребенка, папашка.
считаем по годам (order by year), партицируем по отцам
4 май 16, 12:02    [19132814]     Ответить | Цитировать Сообщить модератору
 Re: Ругается на over - partition by - order by  [new]
iljy
Member

Откуда:
Сообщений: 8711
AlanDenton
iap
В SQL2005. Но они не допускали ORDER BY в OVER()

В смысле? ORDER BY в оконных функциях можно было использовать как только они появились в 2005 версии. Хотя возможно, я не понял о чем Вы.


В ранжирующих - да, а в агрегатах - только с 2012.
4 май 16, 12:03    [19132820]     Ответить | Цитировать Сообщить модератору
 Re: Ругается на over - partition by - order by  [new]
o-o
Guest
iap
AlanDenton
пропущено...

В смысле? ORDER BY в оконных функциях можно было использовать как только они появились в 2005 версии. Хотя возможно, я не понял о чем Вы.

AlanDenton
Насколько я помню агрегатные оконные функции появились в 2012 версии.

граждане, у меня выше приведена картинка.
оконные ф-ции бывают ранжирующими и агргатными.
в ранжирующих over .. order by поддерживается с 2005, в агрегатных с 2012.
ранжирующие, они же Ranking, это в терминах Alan Denton "ROW_NUMBER, NTILE и прочие товарищи по лагерю"
4 май 16, 12:05    [19132831]     Ответить | Цитировать Сообщить модератору
 Re: Ругается на over - partition by - order by  [new]
iap
Member

Откуда: Москва
Сообщений: 47195
o-o
iap
пропущено...

пропущено...

граждане, у меня выше приведена картинка.
оконные ф-ции бывают ранжирующими и агргатными.
в ранжирующих over .. order by поддерживается с 2005, в агрегатных с 2012.
ранжирующие, они же Ranking, это в терминах Alan Denton "ROW_NUMBER, NTILE и прочие товарищи по лагерю"
Ну, а я что говорю? Тоже самое. Не?
4 май 16, 12:07    [19132845]     Ответить | Цитировать Сообщить модератору
 Re: Ругается на over - partition by - order by  [new]
o-o
Guest
iap
o-o
пропущено...

граждане, у меня выше приведена картинка.
оконные ф-ции бывают ранжирующими и агргатными.
в ранжирующих over .. order by поддерживается с 2005, в агрегатных с 2012.
ранжирующие, они же Ranking, это в терминах Alan Denton "ROW_NUMBER, NTILE и прочие товарищи по лагерю"
Ну, а я что говорю? Тоже самое. Не?

так я отвечаю скорее Алану Дентону, в его терминологии.
или надо было болдом выделить слово агрегатные,
или словами еще раз объяснить.
у меня на картинке тоже красным обведено, но, видимо, маловато будет :)
4 май 16, 12:12    [19132870]     Ответить | Цитировать Сообщить модератору
 Re: Ругается на over - partition by - order by  [new]
iap
Member

Откуда: Москва
Сообщений: 47195
o-o
iap
пропущено...
А зачем вам понадобилось COUNT(*) OVER(PARTITION BY ... ORDER BY ...)?
Что вы хотели этим получить? Что-то не понял...

ну например берем многодетного отца
и считаем кол-во его детей в разрезе лет.
т.е. в таблице записаны ДР, фио ребенка, папашка.
считаем по годам (order by year), партицируем по отцам
Не нужен никакой ORDER BY для этого.
PARTITION BY по двум полям - годам и отцам (через запятую).
4 май 16, 12:21    [19132912]     Ответить | Цитировать Сообщить модератору
 Re: Ругается на over - partition by - order by  [new]
iljy
Member

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

не-а, недостаточно этого. Был у него один ребенок в 2008, потом еще один в 2011. У вас получится 2008 - 1, 2009 - 0, 2010 - 0, 2011 - 1. А должно быть 2008 - 1, 2009 - 1, 2010 - 1, 2011 - 2. Это как накопительный итог.
4 май 16, 12:25    [19132931]     Ответить | Цитировать Сообщить модератору
 Re: Ругается на over - partition by - order by  [new]
iap
Member

Откуда: Москва
Сообщений: 47195
iljy
iap,

не-а, недостаточно этого. Был у него один ребенок в 2008, потом еще один в 2011. У вас получится 2008 - 1, 2009 - 0, 2010 - 0, 2011 - 1. А должно быть 2008 - 1, 2009 - 1, 2010 - 1, 2011 - 2. Это как накопительный итог.
Действительно.
Но тогда в рамках SQL 2008 R2 задача одними оконными функциями не решается.
4 май 16, 12:30    [19132959]     Ответить | Цитировать Сообщить модератору
 Re: Ругается на over - partition by - order by  [new]
vasiliusis
Member

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

кстати, по поводу нарастающего итога: можно каким-либо иным образом реализовать нарастающий итог, кроме как использовать подзапросы на каждый столбец, по которому нужно этот итог посчитать?
4 май 16, 12:57    [19133095]     Ответить | Цитировать Сообщить модератору
 Re: Ругается на over - partition by - order by  [new]
Добрый Э - Эх
Guest
vasiliusis
iljy,

кстати, по поводу нарастающего итога: можно каким-либо иным образом реализовать нарастающий итог, кроме как использовать подзапросы на каждый столбец, по которому нужно этот итог посчитать?
с 2005 сервера - [cross | outer] apply
4 май 16, 13:03    [19133147]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить