我有以下表格:
create table TableA (
Id int primary key identity,
Name varchar(80) not null
)
create table TableB (
Id int primary key identity,
TableA_Id int not null foreign key references TableA(Id),
Value varchar(80) not null
)
我想写一个类似于
的查询select TableA.Name, TableB.Value
from TableA
inner join TableB on TableA.Id = TableB.TableA_Id
where TableA.Name like 'a%'
order by TableB.Value asc
除了我只想要TableA_Id
TableB.Value
TableB.Value
内的前10名(按TableB.Value
升序排序)。
我不想返回每个TableA.Name
的每个TableA.Name
,而只想要每个{{1}}的前10个值。
这样的查询是什么?
答案 0 :(得分:5)
使用CROSS APPLY
。
CROSS APPLY
允许您
TOP
ORDER BY
SQL声明
SELECT TableA.Name
, b.Value
FROM TableA
CROSS APPLY (
SELECT TOP 10 *
FROM TableB
WHERE TableA.Id = TableB.TableA_Id
ORDER BY
TableB.Value
) b
WHERE TableA.Name LIKE 'a%'