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

Откуда: Israel
Сообщений: 5500
Есть таблица:
if object_id('dbo.Proba') is not null drop table dbo.Proba
GO

if object_id('dbo.Proba') is null 
CREATE TABLE [Proba] (
	[CarNu] [nvarchar] (10) NOT NULL ,
	[MsgNm] [bigint] NOT NULL ,
	CONSTRAINT [PK_Proba] PRIMARY KEY  CLUSTERED 
	(
		[CarNu],
		[MsgNm]
	)  ON [PRIMARY] 
) ON [PRIMARY]
GO

insert Proba 
select 'A', 2
union select 'A', 3
union select 'A', 4 
union select 'A', 5 
union select 'A', 6 
union select 'A', 7 
union select 'B', 1
union select 'B', 2
union select 'B', 3
union select 'C', 1
union select 'C', 2
union select 'D', 1

Как выбрать для каждого CarNu только по три первых записей из списка, т.е.
получить
CarNu      MsgNm                
---------- -------------------- 

A 2 A 3 A 4 B 1 B 2 B 3 C 1 C 2 D 1

Понимаю, что как то надо испотзовать top 3, но не соображу как :(
22 июл 04, 15:25    [827850]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать по три записи в каждом ключе  [new]
ChA
Member

Откуда: Москва
Сообщений: 11136
SELECT * 
FROM [Proba] p1
WHERE p1.[MsgNm] IN (
	SELECT TOP 3 p2.[MsgNm]
	FROM [Proba] p1
	WHERE p2.[CarNu] = p1.[CarNu]
	ORDER BY p2.[CarNu], p2.[MsgNm]
)
?
22 июл 04, 15:33    [827881]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать по три записи в каждом ключе  [new]
ChA
Member

Откуда: Москва
Сообщений: 11136
SELECT * 
FROM [Proba] p1
WHERE p1.[MsgNm] IN (
	SELECT TOP 3 p2.[MsgNm]
	FROM [Proba] p2
	WHERE p2.[CarNu] = p1.[CarNu]
	ORDER BY p2.[CarNu], p2.[MsgNm]
)
?
22 июл 04, 15:35    [827892]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать по три записи в каждом ключе  [new]
Rivkin Dmitry
Member

Откуда: Israel
Сообщений: 5500
ChA
SELECT * 
FROM [Proba] p1
WHERE p1.[MsgNm] IN (
	SELECT TOP 3 p2.[MsgNm]
	FROM [Proba] p1
	WHERE p2.[CarNu] = p1.[CarNu]
	ORDER BY p2.[CarNu], p2.[MsgNm]
)
?


Примерно то же, что получаю я:
Server: Msg 107, Level 16, State 2, Line 1
The column prefix 'p2' does not match with a table name or alias name used in the query.
22 июл 04, 15:35    [827896]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать по три записи в каждом ключе  [new]
Alex Antonoff
Member

Откуда: Из лесу вестимо
Сообщений: 1251
select * from
Proba p
where (select count(*) from Proba where Proba.CarNu = p.CarNu and p.MsgNm < Proba.MsgNm) < 3
22 июл 04, 15:37    [827906]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать по три записи в каждом ключе  [new]
Rivkin Dmitry
Member

Откуда: Israel
Сообщений: 5500
Второй вариант - работает! Огромное спасибо!
22 июл 04, 15:37    [827907]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать по три записи в каждом ключе  [new]
ChA
Member

Откуда: Москва
Сообщений: 11136
Следующий вариант, ошибка при копировании...
22 июл 04, 15:37    [827910]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить