0

我收到错误

ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效,除非还指定了 TOP 或 FOR XML

对于下面的代码,

SELECT      MIDDLE.MODEL AS Model,  
                    MIDDLE.MANUFACTURER AS Manufacturer,
                    {fn CONCAT(CAST(AVG(ABS(MIDDLE.AVG_YEAR)/365) as Decimal(10, 2)), ' Years')} AS AverageAge, 
                    {fn CONCAT('$',CAST(SUM(MIDDLE.ACQCOST) as Decimal(15,2)))} AS TotalAcquistionCost, 
                    {fn CONCAT('$',CAST(AVG(MIDDLE.ACQCOST) as Decimal(15,2)))} AS AverageAcquistionCost,  
                    {fn CONCAT('$',CAST(SUM(MIDDLE.SUMofSPENT) as Decimal(15,2)))} AS TotalRepairCost, 
                    {fn CONCAT('$',CAST(AVG(MIDDLE.SUMofSPENT) as Decimal(15,2)))} AS AverageRepairCost 
        FROM 

            (SELECT   
                    PRE.Model AS MODEL, 
                    PRE.Manufacturer AS MANUFACTURER, 
                    PRE.Avg_Year AS AVG_YEAR, 
                    PRE.AcqCost AS ACQCOST, 
                    SUM(PRE.Spent) AS SUMofSPENT FROM 
             (SELECT  

                    E.sn AS SerialNumber, 
                    E.mdl AS Model, 
                    DATEDIFF(year, E.acq, GETDATE()) AS Avg_Year, 
                    E.cost AS AcqCost,  
                    E.mfr AS Manufacturer, 
                    FR.spent AS Spent 
                    FROM rme_failrepair AS FR 


            INNER JOIN rme_endo AS E 
                    ON FR.acq_id = E.acq_id 
                    AND FR.en_sn = E.en_sn
            WHERE E.mdl = @mdl

                     ORDER BY SerialNumber, Spent )AS PRE 
                     GROUP BY PRE.SerialNumber) AS MIDDLE
4

2 回答 2

0

正如评论中提到的,这应该是查询。另请注意,您的 GROUP BY 子句也是错误的。您在 SELECT 中包含了许多未出现在 GROUP BY 中的列

 SELECT      
        MIDDLE.MODEL AS Model,  
        MIDDLE.MANUFACTURER AS Manufacturer,
        {fn CONCAT(CAST(AVG(ABS(MIDDLE.AVG_YEAR)/365) as Decimal(10, 2)), ' Years')} AS AverageAge, 
        {fn CONCAT('$',CAST(SUM(MIDDLE.ACQCOST) as Decimal(15,2)))} AS TotalAcquistionCost, 
        {fn CONCAT('$',CAST(AVG(MIDDLE.ACQCOST) as Decimal(15,2)))} AS AverageAcquistionCost,  
        {fn CONCAT('$',CAST(SUM(MIDDLE.SUMofSPENT) as Decimal(15,2)))} AS TotalRepairCost, 
        {fn CONCAT('$',CAST(AVG(MIDDLE.SUMofSPENT) as Decimal(15,2)))} AS AverageRepairCost 
FROM 
(
    SELECT  
        E.sn AS SerialNumber
        E.mdl AS Model, 
        DATEDIFF(year, E.acq, GETDATE()) AS Avg_Year, 
        E.cost AS AcqCost,  
        E.mfr AS Manufacturer, 
        SUM(FR.Spent) AS SUMofSPENT
    FROM rme_failrepair AS FR INNER JOIN rme_endo AS E 
        ON FR.acq_id = E.acq_id AND FR.en_sn = E.en_sn
    WHERE E.mdl = @mdl
    GROUP BY 
        E.sn, E.mdl, DATEDIFF(year, E.acq, GETDATE()), E.cost, E.mfr
) AS MIDDLE
于 2016-05-02T18:05:49.890 回答
0

如果需要ORDER BYin view 或derived table,则需要指定PERCENT

(SELECT  TOP 100 PERCENT 

                E.sn AS SerialNumber, 
                E.mdl AS Model, .....
于 2016-05-02T18:07:11.297 回答