【问题标题】:Sort PagedTable by Column Alias按列别名对 PagedTable 排序
【发布时间】:2014-04-25 01:28:18
【问题描述】:

是否可以按列别名之一对 PagedTable 的结果进行排序?

这是我的工作查询:

SELECT * FROM 
( 
SELECT 
DI.P_ID as IDEA_ID, 
DI.P_IDEA_NUMBER as IDEA_NUMBER, 
CASE WHEN len(DI.P_TITLE) < 1 then 'None recorded' else DI.P_TITLE END as IDEA_TITLE, 
CASE WHEN len(DI.P_IDEA_MANAGER) < 1 then 'None' ELSE isnull((Select top 1 FName+' 'LName from OTHERSERVER.OTHERDB.dbo.Usernames as UN1 where (XID=DI.P_IDEA_MANAGER) order by endDate desc),'No longer on record') end as IDEA_MANAGER, 
CASE WHEN len(DI.P_RELEASE_MONTH) < 1 or len(DI.P_RELEASE_YEAR) < 1 then 'None recorded' else DI.P_RELEASE_MONTH+'/'+DI.P_RELEASE_YEAR END as IDEA_REQUESTED_RELEASE, 
SIS.LABEL as IDEA_STATUS, 
ROW_NUMBER() OVER(Order by DI.P_IDEA_NUMBER ASC) as RowNum 
FROM 
DATA_IDEA as DI 
LEFT OUTER JOIN 
SEL_IDEA_STATUS as SIS on SIS.ID=(SELECT TOP 1 S_ID from DATA_IDEA_STATUS as DIS where (DIS.P_ID=DI.P_ID) order by created desc) 
WHERE 
(SIS.IS_DRAFT='True')
) 
as PagedTable where (RowNum between 1 and 10)

这样,我将按“创意编号”对结果进行排序,即 1、2、3 等。 不按“DI.P_IDEA_NUMBER”排序,是否可以按“IDEA_NUMBER”排序?

您可能认为这没什么大不了的,按创意编号排序。好吧,我还必须让结果可以按“IDEA_MANAGER”排序。根据案例声明,IDEA_MANAGER 将是三件事之一。 1) 约翰·史密斯,2) 没有记录,3) 不再记录

【问题讨论】:

  • 您是否要对最终结果集进行排序?如果是这样,我认为您唯一的选择是按别名排序,因为这些将是从内部查询传递给外部查询的结果集中的列名。您是否尝试将 ORDER BY IDEA_NUMER 或 ORDER BY IDEA_MANAGER 添加到查询的最后。结果如何?
  • @SPKoder - 不,对最终结果集(10 条记录)进行排序不是我想要做的。这里的基本要点是总结果将在 1 - 9,999,999 之间。我希望能够对总结果进行排序,然后从分页表中返回 10 个结果的子集。

标签: sql sorting


【解决方案1】:

“是否可以按列别名之一对 PagedTable 的结果进行排序?”

你试过了吗?

这应该可行:

SELECT Col1 AS MyAlias 
  FROM tbl 
 ORDER BY MyAlias 

这也应该有效:

SELECT * 
  FROM (SELECT Col1 AS MyAlias FROM tbl) a
 ORDER BY MyAlias 

但这可能取决于您的 RDBMS。

借用How do i use alias in where clause?:

column_alias 可以在 ORDER BY 子句中使用,但不能使用 在 WHERE、GROUP BY 或 HAVING 子句中。

Taken from the MSSQL Doc

此外,您不能将其用作 OVER 子句。

cannot use alias in ROW_NUMBER() over in SQL Server?

【讨论】:

  • "ROW_NUMBER() OVER(Order by DI.P_IDEA_NUMBER ASC) as RowNum" 这是数据实际排序的地方。如果我将“DI.P_IDEA_NUMBER”更改为别名“IDEA_NUMBER”或“DI.IDEA_NUMBER”,我会收到错误“列名无效:IDEA_NUMBER”
  • 您不能在 OVER 子句中使用别名。 stackoverflow.com/questions/7297609/…
  • 谢谢,我猜。这只是意味着过去花费在编码上的几个小时被浪费了。
猜你喜欢
  • 2018-06-01
  • 2021-01-27
  • 2013-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-06
相关资源
最近更新 更多