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。
如果我没有错就用 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)
| 归档时间: |
|
| 查看次数: |
8132 次 |
| 最近记录: |