Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 rank + string  [new]
_human_
Guest
можно ли использовать ф-ю rank для данных типа char ?
есть ли какие-то нюансы с collation и т.п. ?
29 мар 13, 20:22    [14114707]     Ответить | Цитировать Сообщить модератору
 Re: rank + string  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
_human_
можно ли использовать ф-ю rank для данных типа char ?
есть ли какие-то нюансы с collation и т.п. ?
А что это за функция такая, это из MDX?
29 мар 13, 20:39    [14114750]     Ответить | Цитировать Сообщить модератору
 Re: rank + string  [new]
zozozozozo
Guest
_human_
можно ли использовать ф-ю rank для данных типа char ?
есть ли какие-то нюансы с collation и т.п. ?


with z(name)
as
(
	select 'Иванов Иван'
		union all
	select 'иванов иван'
		union all
	select 'Дуська Мармеладова'
		union all
	select 'Ираклий Иполитович Полуэктов'
)
select
	rank() over(order by name collate Cyrillic_General_CI_AS) as CI,
	rank() over(order by name collate Cyrillic_General_CS_AS) as CS	
from
	z;


CI	CS
1	1
2	2
2	3
4	4
29 мар 13, 20:56    [14114792]     Ответить | Цитировать Сообщить модератору
 Re: rank + string  [new]
_human_
Guest
zozozozozo, сенк.

select COUNT(z.rn)
from (
select q.fld1, q.fld2, 
	  RANK() over(order by qwe collate Cyrillic_General_CS_AS desc) as rn
from 
(select fld1,fld2, 
	    rank() over(order by fld1 collate Cyrillic_General_CS_AS)+RANK() over(order by fld2 collate Cyrillic_General_CS_AS) as qwe	    
from src) q )z
where z.rn = 1 


в итоге пишет
автор
Expression type bigint is invalid for COLLATE clause.

а если нужно еще указать desc ?
29 мар 13, 22:04    [14114972]     Ответить | Цитировать Сообщить модератору
 Re: rank + string  [new]
invm
Member

Откуда: Москва
Сообщений: 9824
with cte as
(
 select
  fld1, fld2, 
  rank() over(order by fld1 collate Cyrillic_General_CS_AS desc, fld2 collate Cyrillic_General_CS_AS desc) as qwe
 from
  src
)
select
 fld1, fld2
from
 cte
where
 qwe = 1;
29 мар 13, 22:17    [14115009]     Ответить | Цитировать Сообщить модератору
 Re: rank + string  [new]
zozozozozo
Guest
_human_,

во внутреннем подзапросе, формируется колонка qwe с типом int.

внешний запрос пытается работать с ней как со строкой, применяя collate

order by qwe collate Cyrillic_General_CS_AS

потому ошибка "Expression type bigint is invalid for COLLATE clause."
--

чтобы делать desc

rank() over(order by name collate Cyrillic_General_CS_AS desc) as CS
29 мар 13, 22:18    [14115010]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить