2017-09-14 283 views
-1

我的查詢是:如何在子查詢中使用ORDER BY?

SET @query= 
    N'SELECT TaskID 
    ,Company 
    ,TaskSource 
    ,Urgency 
    ,Activity 
    ,StatusName 
    ,RequesterMailID 
    ,tsk.CreatedDate 
    ,tsk.LastUpdatedDate 
    ,LastUpdatedBy 
    ,(DATEDIFF(DAY, dbo.GetTimeByTimeZoneId(SLAStartTime, '' NZST ''), dbo.GetTimeByTimeZoneId(SLAActualEndTime, '' NZST ''))) 
     + 1 
     - count([Pact_OEMS].[dbo].[MstHolidays](HolidayDate)) AS AgeinDaystilldate 
FROM TaskMaster tsk 
LEFT OUTER JOIN TrnTaskReportDetails tsr ON tsk.TaskID = tsr.intTaskId 
FULL OUTER JOIN TrnSLADetails sla ON tsk.TaskID = sla.intTaskId 
FULL OUTER JOIN [Pact_OEMS].[dbo].[MstHolidays] ON [Pact_OEMS].[dbo].[MstHolidays].HolidayId = sla.intTaskId 
WHERE CreatedDate >= @FromDate 
    AND CreatedDate <= @ToDate 
    AND TaskID = @TaskID 
ORDER BY tsk.CreatedDate 
    ,tsk.LastUpdatedDate' 

和錯誤:

The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified.

我如何可以使用一個子查詢ORDER BY

+0

[ORDER BY子句在視圖,內聯函數,派生表,子查詢和公用表表達式中無效](https://stackoverflow.com/questions/18031421/the-order-by-clause- is-invalid-in-views-inline-functions-derived-tables-subqu) –

+1

這個特定的聲明是否會產生錯誤?在我看來,這裏沒有視圖,內聯函數,派生表,子查詢或cte。 –

回答

0

嘗試使用窗口函數像下面

SELECT TaskID, 
     Company, 
     TaskSource, 
     Urgency, 
     Activity, 
     StatusName, 
     RequesterMailID, 
     tsk.CreatedDate, 
     tsk.LastUpdatedDate, 
     LastUpdatedBy, 
     (DATEDIFF(DAY, dbo.GetTimeByTimeZoneId(SLAStartTime, '' NZST ''), dbo.GetTimeByTimeZoneId(SLAActualEndTime, '' NZST '')))+1-COUNT([Pact_OEMS].[dbo].[MstHolidays](HolidayDate)) AS AgeinDaystilldate, 
     ROW_NUMBER() OVER (PARTITION BY TaskID ORDER BY tsk.CreatedDate, 
                 tsk.LastUpdatedDate) rNO 
FROM TaskMaster tsk 
    LEFT OUTER JOIN TrnTaskReportDetails tsr ON tsk.TaskID = tsr.intTaskId 
    FULL OUTER JOIN TrnSLADetails sla ON tsk.TaskID = sla.intTaskId 
    FULL OUTER JOIN [Pact_OEMS].[dbo].[MstHolidays] ON [Pact_OEMS].[dbo].[MstHolidays].HolidayId = sla.intTaskId 
WHERE CreatedDate >= @FromDate 
     AND CreatedDate <= @ToDate 
     AND TaskID = @TaskID 

我也建議閱讀本article因爲它會幫助你調整你的想法和做法。

+0

感謝您的回覆。我應該如何分組? – Queries

+0

你想按哪些列進行分組? – singhswat