2014-04-25 18 views
0

是否可以使用列別名之一對PagedTable的結果進行排序?按列別名對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」排序。根據casemnt的情況,IDEA_MANAGER將成爲三件事之一。 1)約翰史密斯,2)沒有記錄,3)不再有記錄

+0

您是否想對最終結果集進行排序?如果是這樣,我認爲你唯一的選擇是按別名命令排序,因爲這些將是從內部查詢傳遞給外部查詢的結果集中的列名。您是否已嘗試將ORDER BY IDEA_NUMER或ORDER BY IDEA_MANAGER添加到查詢的最後。結果是什麼? – SPKoder

+0

@SPKoder - 不,排序最終結果集(10條記錄)不是我想要做的。 這裏的基本要點是,總的結果將是從1 - 9,999,999任何地方。我希望能夠對整個結果進行排序,然後從分頁表中返回10個結果的子集。 – user3560594

回答

0

「是否可以通過列別名之一對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?

+0

「ROW_NUMBER()OVER(Order by DI.P_IDEA_NUMBER ASC)as RowNum」 這就是數據的實際排序發生的地方。如果我將「DI.P_IDEA_NUMBER」更改爲別名「IDEA_NUMBER」或「DI.IDEA_NUMBER」,則會出現錯誤「列名無效:IDEA_NUMBER」 – user3560594

+0

您無法在OVER子句中使用別名。 http://stackoverflow.com/questions/7297609/cannot-use-alias-in-row-number-over-in-sql-server –

+0

謝謝,我想。這就意味着過去幾個小時的編碼浪費了。 – user3560594