gpt4 book ai didi

sql - 如何在 ROW_NUMBER() OVER 中对日期时间进行排序( ORDER BY 子句

转载 作者:行者123 更新时间:2023-12-03 21:55:09 25 4
gpt4 key购买 nike

嗨,下面的查询是一个更大的复杂查询的原型(prototype)
问题是我应该能够根据用户输入以任何顺序(即 ASC 和 DESC)对任何列进行排序。

CREATE table #Table1(
Name varchar(10) PRIMARY key,
DOB DateTime,
Rate numeric(10,2)
)

INSERT INTO #Table1 (Name,DOB,Rate) values ('Name1','2/2/2012',10.23)
INSERT INTO #Table1 (Name,DOB,Rate) values ('Name2','3/2/2012',120.23)
INSERT INTO #Table1 (Name,DOB,Rate) values ('Name3','4/2/2012',110.23)
INSERT INTO #Table1 (Name,DOB,Rate) values ('Name4','5/2/2012',140.23)
INSERT INTO #Table1 (Name,DOB,Rate) values ('Name15','6/2/2012',130.23)
INSERT INTO #Table1 (Name,DOB,Rate) values ('Name6','2/21/2012',1120.23)

Declare @SortColumn varchar(10)
DECLARE @SortExpression varchar (10)

SET @SortColumn = 'DOB'
SET @SortExpression = 'DESC' -- Need to sort in both ASC and DESC

Select
Name,
DOB,
Rate,
ROW_NUMBER() OVER
(ORDER BY
CASE WHEN @SortColumn = 'Name' then Name
WHEN @SortColumn = 'DOB' THEN DOB
WHEN @SortColumn = 'Rate' THEN Rate
END + @SortExpression
) AS RowNumber
FROM
#Table1

最佳答案

看起来你需要 CAST()CONVERT() CASE 中的项目让它工作:

Declare @SortColumn varchar(10)
DECLARE @SortExpression varchar (10)

SET @SortColumn = 'DOB'
SET @SortExpression = 'DESC' -- Need to sort in both ASC and DESC

Select
Name,
DOB,
Rate,
ROW_NUMBER() OVER
(ORDER BY
CASE WHEN @SortColumn = 'Name' then Name
WHEN @SortColumn = 'DOB' THEN convert(char(10), DOB, 120)
WHEN @SortColumn = 'Rate' THEN Cast(Rate as varchar(10))
END ASC
) AS RowNumberASC,
ROW_NUMBER() OVER
(ORDER BY
CASE WHEN @SortColumn = 'Name' then Name
WHEN @SortColumn = 'DOB' THEN convert(char(10), DOB, 120)
WHEN @SortColumn = 'Rate' THEN Cast(Rate as varchar(10))
END DESC
) AS RowNumberDESC
FROM Table1

SQL Fiddle with Demo

正如@Martin 指出的 ASC , DESC不能参数化。

关于sql - 如何在 ROW_NUMBER() OVER 中对日期时间进行排序( ORDER BY 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12077538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com