在单个 CASE WHEN 语句 SQL 服务器中同时按 ASC 和 DESC 排序
Order by both ASC and DESC at a time in single CASE WHEN statement SQL Server
我有一个名为 BlogsPostForDefault
的存储过程:
CREATE PROCEDURE [dbo].[BlogsPostForDefault]
@RowID int,
@SORTBY nvarchar(50)
AS
BEGIN
DECLARE @PageSize INT = 10
DECLARE @PostIds TABLE(RowID INT, PostID INT, TotalViews INT)
INSERT INTO @postIds (RowId, PostID, totalViews)
SELECT
ROW_NUMBER() OVER(ORDER BY CASE @sortBy WHEN 'date' THEN CP.PostDate END DESC, <-- **adding one more DESC CP.SortOrder here, HOW?**
CASE WHEN @sortBy = 'views' THEN IsNull(MAVC.ViewCount,CP.TotalViews) END DESC),
CP.PostID,
ISNULL(MAVC.ViewCount, CP.TotalViews) AS TotalViews
FROM
CS_Posts CP (NOLOCK)
INNER JOIN
cs_Threads CT (NOLOCK) ON CP.ThreadID = CT.ThreadID
LEFT OUTER JOIN
PostViewCount MAVC (NOLOCK) ON CP.PostID = MAVC.PostID
WHERE
CP.SectionID = 94
AND CP.isapproved = 1
AND cp.PostDate <= GETDATE()
AND CP.PostLevel = 1
SELECT
T.RowId, T.PostID, T.TotalViews,
prd.FinalThumbnailImage AS Thumbnail, CP.Subject,
SUBSTRING(CP.Body,0,1000) as Body,
DATENAME(mm, CP.PostDate)+ ' ' + CONVERT( varchar(2),datepart (dd, CP.PostDate)) + ', '+ CONVERT( varchar(4),datepart(year, CP.PostDate)) as PostDate,
ISNULL(NULLIF(prd.ALT, ''),
CP.Subject) AS ALT
FROM
@postIds T
INNER JOIN
CS_Posts CP (NOLOCK) ON T.PostID = CP.PostID
LEFT OUTER JOIN
Mercola_PostRelatedData prd (NOLOCK) ON T.PostID = prd.PostID
WHERE
T.RowID > @RowID AND T.RowID <= @RowID + @PageSize
ORDER BY
T.RowID
END
当我用
执行上面的存储过程时
Exec [BlogsPostForDefault] 13000, 'date'
我希望它按 CP.PostDate DESC
和 CP.SortOrder DESC
排序
我试图添加这个但是 returns 一个错误。
当前输出:
预期输出:
我该怎么办,求助..!!
尝试在相同条件下将第二个订单添加为第二个案例:
ORDER BY CASE @sortBy WHEN 'date' THEN CP.PostDate END DESC,
CASE @sortBy WHEN 'date' THEN CP.SortOrder END DESC,
CASE @sortBy WHEN 'views' THEN IsNull(MAVC.ViewCount,CP.TotalViews) END
我有一个名为 BlogsPostForDefault
的存储过程:
CREATE PROCEDURE [dbo].[BlogsPostForDefault]
@RowID int,
@SORTBY nvarchar(50)
AS
BEGIN
DECLARE @PageSize INT = 10
DECLARE @PostIds TABLE(RowID INT, PostID INT, TotalViews INT)
INSERT INTO @postIds (RowId, PostID, totalViews)
SELECT
ROW_NUMBER() OVER(ORDER BY CASE @sortBy WHEN 'date' THEN CP.PostDate END DESC, <-- **adding one more DESC CP.SortOrder here, HOW?**
CASE WHEN @sortBy = 'views' THEN IsNull(MAVC.ViewCount,CP.TotalViews) END DESC),
CP.PostID,
ISNULL(MAVC.ViewCount, CP.TotalViews) AS TotalViews
FROM
CS_Posts CP (NOLOCK)
INNER JOIN
cs_Threads CT (NOLOCK) ON CP.ThreadID = CT.ThreadID
LEFT OUTER JOIN
PostViewCount MAVC (NOLOCK) ON CP.PostID = MAVC.PostID
WHERE
CP.SectionID = 94
AND CP.isapproved = 1
AND cp.PostDate <= GETDATE()
AND CP.PostLevel = 1
SELECT
T.RowId, T.PostID, T.TotalViews,
prd.FinalThumbnailImage AS Thumbnail, CP.Subject,
SUBSTRING(CP.Body,0,1000) as Body,
DATENAME(mm, CP.PostDate)+ ' ' + CONVERT( varchar(2),datepart (dd, CP.PostDate)) + ', '+ CONVERT( varchar(4),datepart(year, CP.PostDate)) as PostDate,
ISNULL(NULLIF(prd.ALT, ''),
CP.Subject) AS ALT
FROM
@postIds T
INNER JOIN
CS_Posts CP (NOLOCK) ON T.PostID = CP.PostID
LEFT OUTER JOIN
Mercola_PostRelatedData prd (NOLOCK) ON T.PostID = prd.PostID
WHERE
T.RowID > @RowID AND T.RowID <= @RowID + @PageSize
ORDER BY
T.RowID
END
当我用
执行上面的存储过程时Exec [BlogsPostForDefault] 13000, 'date'
我希望它按 CP.PostDate DESC
和 CP.SortOrder DESC
我试图添加这个但是 returns 一个错误。
当前输出:
预期输出:
我该怎么办,求助..!!
尝试在相同条件下将第二个订单添加为第二个案例:
ORDER BY CASE @sortBy WHEN 'date' THEN CP.PostDate END DESC,
CASE @sortBy WHEN 'date' THEN CP.SortOrder END DESC,
CASE @sortBy WHEN 'views' THEN IsNull(MAVC.ViewCount,CP.TotalViews) END