[英]How can i use PIVOT table on SQL server with AdventureWorksDW database
[英]How to use Order by in Pivot Table using SQL Server
我正在使用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
查詢上方返回以下記錄,
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
但是我想在上面的記錄的“付款日期”處按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
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.
我如何在上述查詢中添加ORDER BY。
如果我沒記錯,請使用TOP 100 Percent
它是由於派生表所致,不允許內部查詢按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 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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.