Sql 向存储过程添加行号
我试图将行号添加到一个存储过程中,该存储过程是多年前由一位退休人员编写的。这两个工会似乎是我遇到麻烦的地方。任何建议都会有帮助,因为我在这里似乎走到了死胡同Sql 向存储过程添加行号,sql,tsql,Sql,Tsql,我试图将行号添加到一个存储过程中,该存储过程是多年前由一位退休人员编写的。这两个工会似乎是我遇到麻烦的地方。任何建议都会有帮助,因为我在这里似乎走到了死胡同 CREATE procedure [dbo].[sp_GetReleases] @Area VARCHAR(10) = NULL as SET @Area = LOWER(@Area) SELECT r.releaseid, r.release_id, r.releasedatetext, r.topic,
CREATE procedure [dbo].[sp_GetReleases]
@Area VARCHAR(10) = NULL
as
SET @Area = LOWER(@Area)
SELECT
r.releaseid, r.release_id, r.releasedatetext, r.topic,
r.releasedate as 'sortdate', '1' as 'sortcode', r.YouTubeID,
rv.Videoflv, rv.Videomp4
FROM release r, area a, ReleaseVideos rv
WHERE r.areaid = a.areaid
AND r.releaseid = rv.releaseid
AND a.area_id = @area
AND r.webdisplay = 1
AND GETDATE() >= availabledate
UNION
-- This is new 02-19-15
SELECT
r.releaseid, r.release_id, r.releasedatetext, r.topic,
r.releasedate as 'sortdate', '1' as 'sortcode', r.YouTubeID,
rv.Videoflv, rv.Videomp4
FROM release r, area a, ReleaseVideos rv, ReleaseStates rs
WHERE r.releaseid = rv.releaseid
AND a.area_id = @area
AND a.areaid = rs.areaid
AND r.releaseid = rs.releaseid
AND r.webdisplay = 1
AND GETDATE() >= availabledate
UNION
SELECT
r.releaseid, r.release_id, r.releasedatetext, r.topic,
(select r2.releasedate
FROM release r2, relatedrelease rr2
WHERE r2.release_id = rr2.release_id) sortdate,
'2' as 'sortcode', r.YouTubeID,
rv.Videoflv, rv.Videomp4
FROM release r, relatedrelease rr, ReleaseVideos rv
WHERE r.release_id = rr.related_id
AND r.releaseid = rv.releaseid
AND r.webdisplay = 1
AND GETDATE() >= r.availabledate
AND rr.release_id in
(SELECT release_id
FROM release, area a
WHERE a.area_id = @area
AND release.areaid = a.areaid)
ORDER BY sortdate DESC, sortcode
GO
用另一个select封装整个sql,并为外部查询应用
row\u number()
select x.*, row_number() over (order by release_id) rn
from (
SELECT
r.releaseid, r.release_id, r.releasedatetext, r.topic,
r.releasedate as 'sortdate', '1' as 'sortcode', r.YouTubeID,
rv.Videoflv, rv.Videomp4
FROM release r, area a, ReleaseVideos rv
WHERE r.areaid = a.areaid
AND r.releaseid = rv.releaseid
AND a.area_id = @area
AND r.webdisplay = 1
AND GETDATE() >= availabledate
UNION
-- This is new 02-19-15
SELECT
r.releaseid, r.release_id, r.releasedatetext, r.topic,
r.releasedate as 'sortdate', '1' as 'sortcode', r.YouTubeID,
rv.Videoflv, rv.Videomp4
FROM release r, area a, ReleaseVideos rv, ReleaseStates rs
WHERE r.releaseid = rv.releaseid
AND a.area_id = @area
AND a.areaid = rs.areaid
AND r.releaseid = rs.releaseid
AND r.webdisplay = 1
AND GETDATE() >= availabledate
UNION
SELECT
r.releaseid, r.release_id, r.releasedatetext, r.topic,
(select r2.releasedate
FROM release r2, relatedrelease rr2
WHERE r2.release_id = rr2.release_id) sortdate,
'2' as 'sortcode', r.YouTubeID,
rv.Videoflv, rv.Videomp4
FROM release r, relatedrelease rr, ReleaseVideos rv
WHERE r.release_id = rr.related_id
AND r.releaseid = rv.releaseid
AND r.webdisplay = 1
AND GETDATE() >= r.availabledate
AND rr.release_id in
(SELECT release_id
FROM release, area a
WHERE a.area_id = @area
AND release.areaid = a.areaid)
ORDER BY sortdate DESC, sortcode
) x
a
)a
中选择所有列,并根据a
中的信息选择其他列WITH a AS (
-- the original query, minus the order by clause
)
SELECT
*,
rn=ROW_NUMBER() OVER (/*your number partitioning/ordering here*/)
FROM
a
-- original order by clause here
您可以将from子句中的表达式调用为“派生表”。