Tsql 如何在此查询中使用Count子句?
我有一个相当昂贵的查询,返回一页结果:Tsql 如何在此查询中使用Count子句?,tsql,Tsql,我有一个相当昂贵的查询,返回一页结果: SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY j.PostDate DESC) as Row, FROM JobListing j, Location l, City c,
SELECT * FROM
(SELECT
ROW_NUMBER() OVER (ORDER BY j.PostDate DESC) as Row,
FROM
JobListing j,
Location l,
City c,
JobListing_Skill_XREF js,
@SkillTable st
WHERE
DistanceBetween(@lat,@long, c.Lat,c.Long) <= @miles AND
js.Skill_ID = st.id AND
j.location = l.id AND
j.id = js.JobListing_Id AND
l.CityID = c.Id
) AS RESULTS
WHERE Row Between (@PageNumber - 1) * @PageSize + 1 and (@PageNumber * @PageSize)
我想做的是返回内部查询的总计数,以便计算总页数
然而,我不知道如何将COUNT子句穿入其中,我真的不想将其选择到临时表中,或者只为了计算页面计数而运行两次
有什么想法吗?用一个?像这样的东西显然无法测试:
WITH R (Row)
AS
(
SELECT
ROW_NUMBER() OVER (ORDER BY j.PostDate DESC) as Row,
FROM JobListing j, Location l, City c, JobListing_Skill_XREF js,@SkillTable st
WHERE DistanceBetween(@lat,@long, c.Lat,c.Long) <= @miles AND
js.Skill_ID = st.id AND
j.location = l.id AND
j.id = js.JobListing_Id AND
l.CityID = c.Id
)
SELECT R.*, COUNT(R.*) AS [Count] FROM R
WHERE R.Row Between (@PageNumber - 1) *
@PageSize + 1 and (@PageNumber * @PageSize)
用一个?像这样的东西显然无法测试:
WITH R (Row)
AS
(
SELECT
ROW_NUMBER() OVER (ORDER BY j.PostDate DESC) as Row,
FROM JobListing j, Location l, City c, JobListing_Skill_XREF js,@SkillTable st
WHERE DistanceBetween(@lat,@long, c.Lat,c.Long) <= @miles AND
js.Skill_ID = st.id AND
j.location = l.id AND
j.id = js.JobListing_Id AND
l.CityID = c.Id
)
SELECT R.*, COUNT(R.*) AS [Count] FROM R
WHERE R.Row Between (@PageNumber - 1) *
@PageSize + 1 and (@PageNumber * @PageSize)
这是我能做的最好的,我想知道人们是否有更好的建议:
DECLARE @JobTable TABLE
(
...snip...
);
INSERT INTO @JobTable
SELECT
ROW_NUMBER() OVER (ORDER BY j.PostDate DESC) as Row,
j.*
FROM
JobListing j,
Location l,
City c,
JobListing_Skill_XREF js,
@SkillTable st
WHERE
DistanceBetween(@lat,@long, c.Lat,c.Long) <= @miles AND
js.Skill_ID = st.id AND
j.location = l.id AND
j.id = js.JobListing_Id AND
l.CityID = c.Id
SELECT *
FROM @JobTable
WHERE
Row BETWEEN
(@PageNumber - 1) * @PageSize + 1
AND (@PageNumber * @PageSize)
SELECT @TotalRows = Count(1) FROM @JobTable;
这是我能做的最好的,我想知道人们是否有更好的建议:
DECLARE @JobTable TABLE
(
...snip...
);
INSERT INTO @JobTable
SELECT
ROW_NUMBER() OVER (ORDER BY j.PostDate DESC) as Row,
j.*
FROM
JobListing j,
Location l,
City c,
JobListing_Skill_XREF js,
@SkillTable st
WHERE
DistanceBetween(@lat,@long, c.Lat,c.Long) <= @miles AND
js.Skill_ID = st.id AND
j.location = l.id AND
j.id = js.JobListing_Id AND
l.CityID = c.Id
SELECT *
FROM @JobTable
WHERE
Row BETWEEN
(@PageNumber - 1) * @PageSize + 1
AND (@PageNumber * @PageSize)
SELECT @TotalRows = Count(1) FROM @JobTable;
具有相同问题的查询中不允许使用CountR.*:具有相同问题的查询中不允许使用CountR.*: