Reputation: 15
I'm attempting to add row numbers to a stored procedure that was written years ago by someone that has since retired. The two unions seem to where I'm running into trouble. Any suggestions would be helpful as I seemed to be at a dead end here.
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
Upvotes: 1
Views: 297
Reputation: 16143
a
)a
and an additional ROW_NUMBER() based on information in a
.The outline:
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
Upvotes: 1
Reputation: 30663
encapsulate whole sql with another select and apply row_number()
for the outer query
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
Upvotes: 1