Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Считать запись номер 2 (3), ...  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Уважаемые коллеги!
Прошу подсказки- можно ли считать из таблицы

Map_fld

fld    Value
-----------
a      aaaa
a      aaaab
a      aaatr
b      



вторую (третью) запись , where fld='a'

Спасибо!
18 мар 15, 16:40    [17400813]     Ответить | Цитировать Сообщить модератору
 Re: Считать запись номер 2 (3), ...  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
with cte
as
(
select row_number() over ( order by Value ) num from Map_fld
where fld = 'a'
)
select fld, value from cte where num in ( 2,3 )
18 мар 15, 16:43    [17400835]     Ответить | Цитировать Сообщить модератору
 Re: Считать запись номер 2 (3), ...  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5133
topdon
Уважаемые коллеги!
Прошу подсказки- можно ли считать из таблицы

Map_fld

fld    Value
-----------
a      aaaa
a      aaaab
a      aaatr
b      



вторую (третью) запись , where fld='a'

Спасибо!

and value = 'aaatr' :)
Топ 3, обратная сортировка и топ 1
18 мар 15, 16:44    [17400843]     Ответить | Цитировать Сообщить модератору
 Re: Считать запись номер 2 (3), ...  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20600
Если нет сортировки, то нет и порядка записей.
А если сортировка есть, то row_number() over(partition by fld).
18 мар 15, 16:44    [17400844]     Ответить | Цитировать Сообщить модератору
 Re: Считать запись номер 2 (3), ...  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5133
Knyazev Alexey
with cte
as
(
select row_number() over ( order by Value ) num from Map_fld
where fld = 'a'
)
select fld, value from cte where num in ( 2,3 )

в 2012 да, прокатит
18 мар 15, 16:45    [17400848]     Ответить | Цитировать Сообщить модератору
 Re: Считать запись номер 2 (3), ...  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
Александр52
в 2012 да, прокатит


2005 and UP
18 мар 15, 16:47    [17400869]     Ответить | Цитировать Сообщить модератору
 Re: Считать запись номер 2 (3), ...  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Александр52,
у меня 2005

за значения поля value зацепиться нельзя! Они даны просто для примера
18 мар 15, 16:47    [17400870]     Ответить | Цитировать Сообщить модератору
 Re: Считать запись номер 2 (3), ...  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Александр52
Knyazev Alexey
with cte
as
(
select row_number() over ( order by Value ) num from Map_fld
where fld = 'a'
)
select fld, value from cte where num in ( 2,3 )


в 2012 да, прокатит
В любом, начиная с SQL2005
18 мар 15, 16:48    [17400875]     Ответить | Цитировать Сообщить модератору
 Re: Считать запись номер 2 (3), ...  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
topdon
за значения поля value зацепиться нельзя! Они даны просто для примера

нет поля для установки порядка записей - нет порядка записей!
18 мар 15, 16:48    [17400876]     Ответить | Цитировать Сообщить модератору
 Re: Считать запись номер 2 (3), ...  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5133
iap
Александр52
пропущено...

в 2012 да, прокатит
В любом, начиная с SQL2005

спасибо, думал это фишка 2012 сиквела
18 мар 15, 16:50    [17400893]     Ответить | Цитировать Сообщить модератору
 Re: Считать запись номер 2 (3), ...  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Александр52,

Ребята, спасибо, навели на мысль завтра подготовлюсь и отвечу.
18 мар 15, 17:00    [17400975]     Ответить | Цитировать Сообщить модератору
 Re: Считать запись номер 2 (3), ...  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5133
topdon
Александр52,

Ребята, спасибо, навели на мысль завтра подготовлюсь и отвечу.


От меня отдельное спасибо Леше и Иапу, 3 года назад мучался с TOP, будучи уверен, что row_number() не прокатит в 2008.
18 мар 15, 17:06    [17401036]     Ответить | Цитировать Сообщить модератору
 Re: Считать запись номер 2 (3), ...  [new]
PZH
Member

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

Если под номером значения подразумевается сортировка по value. То можно решить так, по олдскульному без всяких row_numbero'в :)

if object_id('dbo.Map_fld') is not null drop table Map_fld
create table Map_fld (fld varchar(10), value varchar(10))

insert into Map_fld values ('a', 'aaaa')
insert into Map_fld values ('a', 'aaaab')
insert into Map_fld values ('a', 'aaatr')
insert into Map_fld values ('b', '')
select * from map_fld

declare @number int
set @number = 1 --какой по порядку номер нужно получить

select * from
	(
	select count(*) as num, base.value, base.fld
		from Map_fld as base
			inner join map_fld as prog
				on base.value >= prog.value
		where
			base.fld = 'a'
			and prog.fld = 'a'	-- нужно задублировать фильтр иначе нумерация будет по всей таблице
		group by base.value, base.fld
	) as main
18 мар 15, 17:39    [17401291]     Ответить | Цитировать Сообщить модератору
 Re: Считать запись номер 2 (3), ...  [new]
PZH
Member

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

Не все скопировал! Вот так точнее

if object_id('dbo.Map_fld') is not null drop table Map_fld
create table Map_fld (fld varchar(10), value varchar(10))

insert into Map_fld values ('a', 'aaaa')
insert into Map_fld values ('a', 'aaaab')
insert into Map_fld values ('a', 'aaatr')
insert into Map_fld values ('b', '')
select * from map_fld

declare @number int
set @number = 2 --какой по порядку номер нужно получить

select * from
	(
	select count(*) as num, base.value, base.fld
		from Map_fld as base
			inner join map_fld as prog
				on base.value >= prog.value
		where
			base.fld = 'a'
			and prog.fld = 'a'	-- нужно задублировать фильтр иначе нумерация будет по всей таблице
		group by base.value, base.fld
	) as main
where main.num = @number
18 мар 15, 17:41    [17401305]     Ответить | Цитировать Сообщить модератору
 Re: Считать запись номер 2 (3), ...  [new]
o-o
Guest
Александр52
От меня отдельное спасибо Леше и Иапу, 3 года назад мучался с TOP, будучи уверен, что row_number() не прокатит в 2008.

я фигею, дорогая редакция,
Александр52, вас, извините,
расстреливают на месте за неправильный синтаксис?
за 3 года ок, лень БОЛ почитать, но набрать строку кода и попытаться выполнить?
...нам бразильзев не понять
18 мар 15, 17:48    [17401349]     Ответить | Цитировать Сообщить модератору
 Re: Считать запись номер 2 (3), ...  [new]
o-o
Guest
SQL Server 2012 onwards:
declare @t table (fld varchar(10),    Value varchar(10));
insert into @t
values
('a',      'aaaa'),
('a',      'aaaab'),
('a',      'aaatr'),
('b' ,     null);

-- 2nd record --
select *
from @t
where fld = 'a'
order by Value offset 1 rows fetch first 1 row only;
---
fld	Value
a	aaaab

-- 3d record --
select *
from @t
where fld = 'a'
order by Value offset 2 rows fetch first 1 row only;
---
fld	Value
a	aaatr
18 мар 15, 18:29    [17401516]     Ответить | Цитировать Сообщить модератору
 Re: Считать запись номер 2 (3), ...  [new]
Добрый Э - Эх
Guest
o-o
за 3 года ... лень ... набрать строку кода и попытаться выполнить?
...нам бразильзев не понять
зря ты так. у бразильцев как раз таки очень интересная система обучения. в том числе и бездумный метод проб и ошибок...
[youtube=]
19 мар 15, 05:11    [17403133]     Ответить | Цитировать Сообщить модератору
 Re: Считать запись номер 2 (3), ...  [new]
o-o
Guest
Добрый Э - Эх,
И то верно, так что вывод здесь другой:
Александр52 -- не вратарь!
19 мар 15, 08:17    [17403242]     Ответить | Цитировать Сообщить модератору
 Re: Считать запись номер 2 (3), ...  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
topdon,
Запросом

select substring(s,1,1) fld,* from libra1.dbo.parsestring(doc, char(30)+char(31))
order by fld,n


мне удалось получить картинку

fld     n      v
----------------------------------------
1	1	1 
5	220	5Библиотека РГЭУ "РИНХ"
a	4	aЭколого-экономическое развитие депрессивных территорий: факторы и подходы к реализации
b	184	bТекст
e	92	eдис. на соиск. учен. степ. канд. экон. наук
e	191	e08.00.05
e	201	eзащищена 21.06.07
f	137	fХ. Х. Чумаков
g	152	g[Рост. гос. экон. ун-т "РИНХ"]


теперь надо выбрать, например, первое e, второе и т.д.?
19 мар 15, 11:37    [17404238]     Ответить | Цитировать Сообщить модератору
 Re: Считать запись номер 2 (3), ...  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
topdon,

теперь запрос

with cte
as
(
select s, n, row_number() over ( order by n ) num from libra1.dbo.parsestring('1 aЭколого-экономическое развитие депрессивных территорий: факторы и подходы к реализацииeдис. на соиск. учен. степ. канд. экон. наукfХ. Х. Чумаковg[Рост. гос. экон. ун-т "РИНХ"]bТекстe08.00.05eзащищена 21.06.075Библиотека РГЭУ "РИНХ"', char(30)+char(31))
where substring(s,1,1) = 'e'
)
select substring(s,2,len(s)-1) s from cte where num =1


дает нужный результат.

s
--------------------------------------------
дис. на соиск. учен. степ. канд. экон. наук


Спасибо!
19 мар 15, 13:21    [17405019]     Ответить | Цитировать Сообщить модератору
 Re: Считать запись номер 2 (3), ...  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
topdon,

cte нельзя использовать в функциях??
Это прокол.
19 мар 15, 16:05    [17406059]     Ответить | Цитировать Сообщить модератору
 Re: Считать запись номер 2 (3), ...  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
topdon
topdon,

cte нельзя использовать в функциях??
Это прокол.


cte можно использовать в функциях.
19 мар 15, 16:10    [17406102]     Ответить | Цитировать Сообщить модератору
 Re: Считать запись номер 2 (3), ...  [new]
iap
Member

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

cte нельзя использовать в функциях??
Это прокол.
Чегой-то?! 0-O
А мужики-то и не знают...
19 мар 15, 16:10    [17406104]     Ответить | Цитировать Сообщить модератору
 Re: Считать запись номер 2 (3), ...  [new]
o-o
Guest
topdon
topdon,

cte нельзя использовать в функциях??
Это прокол.

откуда такое?
CREATE FUNCTION [dbo].[topdon]
(
    @param1 int,
    @param2 char(5)
)
RETURNS @returntable TABLE 
(
	[c1] int,
	[c2] char(5)
)
AS
BEGIN
    with cte as(
	select 1 as col1, 'a' as col2)
    INSERT @returntable
    SELECT col1 + @param1, col2 +@param2
	from cte
    RETURN 
END
19 мар 15, 16:11    [17406118]     Ответить | Цитировать Сообщить модератору
 Re: Считать запись номер 2 (3), ...  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
CREATE FUNCTION F() RETURNS TABLE RETURN WITH CTE(x)AS(SELECT 0 UNION ALL SELECT 1) SELECT * FROM CTE;
19 мар 15, 16:15    [17406132]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить