如何使用 SQL Server 在数据透视表中使用 Order by

Imr*_*han 1 sql sql-server sql-server-2008

我正在使用 SQL Server 2008,并对数据透视表进行以下查询,

SELECT [pay date], 
       [adm. fee], 
       [colleege dev.] 
FROM   (SELECT 
       CONVERT(VARCHAR(10), CONVERT(DATE, dbo._feepayment._issuedate, 106), 105) AS [Pay Date], 
       dbo._feehead._feeheadname AS aaa, 
       Isnull(dbo._feepaymentdet._amount, 0) AS _AMOUNT 
        FROM   dbo._feepaymentdet 
               LEFT OUTER JOIN dbo._feehead 
                            ON dbo._feepaymentdet._feeheadid = 
                               dbo._feehead._feeheadid 
               RIGHT OUTER JOIN dbo._feepayment 
                             ON dbo._feepaymentdet._feepaymentid = 
                                dbo._feepayment._feepaymentid 
        WHERE  ( dbo._feehead._isdeleted = N'1' ) 
               AND ( dbo._feepayment._isdeleted = N'1' ) 
               AND ( dbo._feepaymentdet._isdeleted = N'1' ) 
               AND dbo._feepayment._issuedate >= 
                   CONVERT(DATETIME, '01.09.2014 00:00:00', 105) 
               AND dbo._feepayment._issuedate <= 
                   CONVERT(DATETIME, '11.09.2014 23:59:59', 105)) AS s 
       PIVOT ( Sum(s._amount) 
             FOR s.aaa IN ( [ADM. FEE], 
                            [COLLEEGE DEV.] ) ) pvt 
Run Code Online (Sandbox Code Playgroud)

以上查询返回以下记录,

Pay Date        ADM. FEE     COLLEEGE DEV.
09-09-2014      25.00        100.00
05-09-2014      75.00        300.00
01-09-2014      25.00        100.00
03-09-2014      75.00        310.00
02-09-2014      50.00        200.00
Run Code Online (Sandbox Code Playgroud)

ORDER BY如果我添加,我想要上面的付款日期记录

WHERE (dbo._FEEHEAD._ISDELETED = N'1') 
 AND (dbo._FEEPAYMENT._ISDELETED = N'1') 
 AND (dbo._FEEPAYMENTDET._ISDELETED = N'1')  
 AND dbo._FEEPAYMENT._ISSUEDATE >= CONVERT(DATETIME, '01.09.2014 00:00:00', 105) 
 AND dbo._FEEPAYMENT._ISSUEDATE <= CONVERT(DATETIME, '11.09.2014 23:59:59', 105)
 ORDER BY dbo._FEEPAYMENT._ISSUEDATE 
Run Code Online (Sandbox Code Playgroud)

SQL给我错误:

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.
Run Code Online (Sandbox Code Playgroud)

我如何在上面的查询中添加 ORDER BY。

Gan*_*kar 5

如果我没有错就用 TOP 100 Percent

由于派生表不允许内部查询的 Order BY 子句

SELECT TOP 100 Percent [Pay Date], [ADM. FEE], [COLLEEGE DEV.] FROM 
 (SELECT Convert(varchar(10),CONVERT(date,dbo._FEEPAYMENT._ISSUEDATE,106),105) AS [Pay Date], 
 dbo._FEEHEAD._FEEHEADNAME AS aaa, ISNULL(dbo._FEEPAYMENTDET._AMOUNT ,0) AS _AMOUNT 
 FROM dbo._FEEPAYMENTDET LEFT OUTER JOIN dbo._FEEHEAD ON dbo._FEEPAYMENTDET._FEEHEADID 
 = dbo._FEEHEAD._FEEHEADID RIGHT OUTER JOIN dbo._FEEPAYMENT ON 
 dbo._FEEPAYMENTDET._FEEPAYMENTID = dbo._FEEPAYMENT._FEEPAYMENTID 
 WHERE (dbo._FEEHEAD._ISDELETED = N'1') 
 AND (dbo._FEEPAYMENT._ISDELETED = N'1') 
 AND (dbo._FEEPAYMENTDET._ISDELETED = N'1')  
 AND dbo._FEEPAYMENT._ISSUEDATE >= CONVERT(DATETIME, '01.09.2014 00:00:00', 105) 
 AND dbo._FEEPAYMENT._ISSUEDATE <= CONVERT(DATETIME, '11.09.2014 23:59:59', 105)) 
 as s PIVOT ( Sum(s._AMOUNT) FOR s.aaa IN ( [ADM. FEE], [COLLEEGE DEV.] ) ) pvt
Order BY pvt.[Pay Date]
Run Code Online (Sandbox Code Playgroud)

或者

没有 TOP 100 Percent

SELECT [Pay Date], [ADM. FEE], [COLLEEGE DEV.] FROM 
 (SELECT Convert(varchar(10),CONVERT(date,dbo._FEEPAYMENT._ISSUEDATE,106),105) AS [Pay Date], 
 dbo._FEEHEAD._FEEHEADNAME AS aaa, ISNULL(dbo._FEEPAYMENTDET._AMOUNT ,0) AS _AMOUNT 
 FROM dbo._FEEPAYMENTDET LEFT OUTER JOIN dbo._FEEHEAD ON dbo._FEEPAYMENTDET._FEEHEADID 
 = dbo._FEEHEAD._FEEHEADID RIGHT OUTER JOIN dbo._FEEPAYMENT ON 
 dbo._FEEPAYMENTDET._FEEPAYMENTID = dbo._FEEPAYMENT._FEEPAYMENTID 
 WHERE (dbo._FEEHEAD._ISDELETED = N'1') 
 AND (dbo._FEEPAYMENT._ISDELETED = N'1') 
 AND (dbo._FEEPAYMENTDET._ISDELETED = N'1')  
 AND dbo._FEEPAYMENT._ISSUEDATE >= CONVERT(DATETIME, '01.09.2014 00:00:00', 105) 
 AND dbo._FEEPAYMENT._ISSUEDATE <= CONVERT(DATETIME, '11.09.2014 23:59:59', 105)) 
 as s PIVOT ( Sum(s._AMOUNT) FOR s.aaa IN ( [ADM. FEE], [COLLEEGE DEV.] ) ) pvt
Order BY pvt.[Pay Date]
Run Code Online (Sandbox Code Playgroud)