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

如何使用SQL Server在透视表中使用Order by,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我正在使用SQL Server 2008,并对Pivot表进行以下查询 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 a

我正在使用SQL Server 2008,并对Pivot表进行以下查询

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 
但如果我添加,我希望在上述记录的付款日期按订购

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 

如何在上面的查询中添加订单。

如果我没有错,请使用
TOP 100%

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]
这是由于内部查询不允许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]

如果我没有错,请使用
TOP 100%

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]
这是由于内部查询不允许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]

+1,谢谢,它起作用了,我试着用谷歌搜索了3年hrs@BogdanSahlean正如错误所说,
TOP
是必须的,我需要所有行,因此我使用了
TOP(100)
@BogdanSahlean是的,我知道内部查询不允许
orderby子句
,但它有一个技巧。现在更新了两种可能性+1,谢谢,它正在工作,我从上一个3开始试着用谷歌搜索hrs@BogdanSahlean正如错误所说,
TOP
是必须的,我需要所有行,因此我使用了
TOP(100)
@BogdanSahlean是的,我知道内部查询不允许
orderby子句
,但它有一个技巧。现在更新了两种可能性