2017-09-14 10 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