2013-08-06 44 views
-2

我的存储procedeur这样的:ORDER BY子句在视图,内联函数,派生表无效,子查询

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子句在视图,内联函数,派生表无效,子查询

+1

你试过在你的透视后移动ORDER BY LocName吗?那么''p'后面呢? – Taryn

+0

对于它的价值,存储过程不需要'BEGIN'和'END'语句。 – ErikE

+0

我尝试用p后,移动为了那个时候我收到错误这样的“多部分组成的标识符‘l.LocName’无法绑定 – user2648161

回答

2

试试你的order by条款迁移到 select语句—其中order by使任何唯一的地方感。

喜欢的东西

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

甚至更​​简单,封装了原始的,复杂的select在外部选择,其唯一目的是订货,沿着这些线路:

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

我该怎么做? – user2648161

+0

看到我修正的答案。 –

+0

第二个人为我工作得很好..谢谢 – user2648161

相关问题