-2

我的存储过程是这样的:

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

我想按升序获取我的 locname,但是在按 l.LocName 给出顺序时出现错误:ORDER BY 子句在视图、内联函数、派生表、子查询中无效

4

2 回答 2

3

通过在视图定义中添加一个TOP 100 PERCENT子句,我们可以很容易地解决这个问题。尝试使用这种方式 - http://www.sqlpassion.at/archive/2015/05/25/the-ambiguity-of-the-order-by-in-sql-server/

于 2016-08-23T07:39:03.653 回答
2

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

就像是

select LocName ,
       ...
from ...
order by LocName

或者,甚至更简单,将原始的、复杂的包装select在一个唯一目的是排序的外部选择中,如下所示:

select *
from ( select
       ...   
     ) t
order by t.x, t.y , ... 
于 2013-08-06T16:55:57.730 回答