读书人

同一表中 不同类型的数据 按类型返回前

发布时间: 2012-01-11 22:28:46 作者: rapoo

同一表中 不同类型的数据 按类型返回前n条?
比如

table
------------------------------
id | name | category | price
------------------------------
int| char | char | decimal
------------------------------

originalData:
------------------------------
0 | na | c1 | 10
1 | nb | c1 | 400
2 | nc | c1 | 400
3 | nd | c2 | 60
4 | ne | c2 | 40
5 | nf | c2 | 60
6 | ng | c2 | 200
7 | nh | c3 | 20
8 | ni | c3 | 80
9 | nj | c3 | 100
10 | nk | c3 | 100

expected:(n = 2)
------------------------------
1 | nb | c1 | 400
2 | nc | c1 | 400
6 | ng | c2 | 200
3 | nd | c2 | 60
9 | nj | c3 | 100
10 | nk | c3 | 100


我需要每个种类(category)里面;价钱(price)最高的n条数据.
怎样写查询语句?
期望结果是 种类数目x n 条(distict count(category))*2

[解决办法]
select T.*
from originalData T
where id in(select top 2 id from originalData where T.category=category order by price DESC)
[解决办法]
--expected:(n = 3)
--条件语句 子查询 top 后面为n
select * from originaldata a
where a.id in ( select top 3 id from originaldata where category = a.category order by price desc )
order by category , price desc

--------------------------------

1nb c1 400.00
2nc c1 400.00
0na c1 10.00
6ng c2 200.00
3nd c2 60.00
5nf c2 60.00
9nj c3 100.00
10nk c3 100.00
8ni c3 80.00


[解决办法]
create table originalData


(
id int,
name char(2),
category char(2),
price int
)

insert originalData select 0, 'na ', 'c1 ',10
insert originalData select 1, 'nb ', 'c1 ',400
insert originalData select 2, 'nc ', 'c1 ',400
insert originalData select 3, 'nd ', 'c2 ',60
insert originalData select 4, 'ne ', 'c2 ',40
insert originalData select 5, 'nf ', 'c2 ',60
insert originalData select 6, 'ng ', 'c2 ',200
insert originalData select 7, 'nh ', 'c3 ',20
insert originalData select 8, 'ni ', 'c3 ',80
insert originalData select 9, 'nj ', 'c3 ',100
insert originalData select 10, 'nk ', 'c3 ',100

declare @T_SQL varchar(8000)
declare @n int
set @n=3
set @T_SQL= 'select T.*
from originalData T
where id in(select top ' + cast(@n as varchar) + ' id from originalData where T.category=category order by price DESC) order by T.category,T.price DESC
'

exec (@T_SQL)

读书人网 >SQL Server

热点推荐