Sql server ORDER BY子句在视图、内联函数、派生表和子查询中无效

Sql server ORDER BY子句在视图、内联函数、派生表和子查询中无效,sql-server,Sql Server,我的存储过程如下所示: alter PROCEDURE [dbo].[ParkingDeatailsReportnewstack] @startdate NVARCHAR(100), @enddate NVARCHAR(100)AS BEGIN DECLARE @cols AS NVARCHAR(MAX) , @query AS NVARCHAR(MAX) SELECT @cols = STUFF(( SELECT DISTINCT ',' + Q

我的存储过程如下所示:

alter PROCEDURE [dbo].[ParkingDeatailsReportnewstack] 
      @startdate NVARCHAR(100),
      @enddate NVARCHAR(100)AS
BEGIN
    DECLARE  @cols AS NVARCHAR(MAX) , @query AS NVARCHAR(MAX)

    SELECT @cols = STUFF((  SELECT DISTINCT ',' + QUOTENAME(Vtype)
    FROM dbo.VType_tbl FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')

    SET @query =
        'SELECT  LocName,Date, ' + @cols + '
         from  ( 
                select  l.LocName,v.Vtype, convert(date, dtime) as Date 
                from Transaction_tbl t 
                join VType_tbl v on t.vtid = v.vtid 
                join dbo.Location_tbl l on t.locid=l.Locid
                where dtime between ''' + @startdate + ''' and ''' + @enddate + '''  order by l.LocName
         ) d
         pivot (
                count(Vtype) for Vtype in (' + @cols + ')
         ) p '  

    EXEC sys.sp_executesql @query
End
我想把我的名字按升序排列,但在给予
order by l.LocName获取错误:order by子句在视图、内联函数、派生表、子查询中无效

请尝试将您的
order by
子句迁移到最外层的select语句中,
order by
是唯一有意义的地方

差不多

select LocName ,
       ...
from ...
order by LocName
或者,更简单的是,将原始复杂的
select
包装在一个外部select中,该外部select的唯一目的是订购,大致如下:

select *
from ( select
       ...   
     ) t
order by t.x, t.y , ... 

通过在视图定义中添加一个TOP 100%子句,我们可以很容易地解决这个问题。 试着用这种方法-

您是否尝试过将
订单按LocName
移动到枢轴之后?因此,在
)p
之后,存储过程不需要
开始
结束
语句。我尝试将顺序移动到p之后,这时我遇到了类似“多部分标识符”l.LocName这样的错误“不可能bound@user2648161不要使用别名,只需使用
LocName
,请纠正您的程序名的拼写,否则维护人员将永远诅咒您的名字。请参阅我的修订答案。当您无法通过外部查询提取订单时,更好的解决方案。谢谢