SQL 错误“视图中的 ORDER BY 子句无效...”
Posted
技术标签:
【中文标题】SQL 错误“视图中的 ORDER BY 子句无效...”【英文标题】:SQL Error "The ORDER BY clause is invalid in views..." 【发布时间】:2011-08-22 04:44:08 【问题描述】:我正在尝试解决一个 SQL Server 错误。有人可以帮帮我吗?
查询是:
SELECT TOP 10 *
FROM (
SELECT c.id, c.name, c.inserteddate, c.cityname, ftblstates.name AS statename, clc.name AS catname, '' AS listingimagelogo, '' AS orgname, relocateyn, '' AS employerclassified
FROM ((tblclassifieds c
LEFT JOIN tblclassifiedscategories clc ON c.categoryid = clc.id)
LEFT JOIN ftblstates ON c.stateid = ftblstates.id)
WHERE (c.expirydate != '') AND NOT c.id IN (
SELECT TOP 10 tblclassifieds.id
FROM tblclassifieds
WHERE (c.expirydate != '')
ORDER BY inserteddate desc)
UNION ALL
SELECT ce.id, ce.name, ce.inserteddate, suburb AS cityname, ftblstates.name AS statename, ce.jobtype AS catname, ce.listingimagelogo, ce.orgname, '' AS relocateyn, '1' AS employerclassified
FROM tblclassifiedemployers ce
LEFT JOIN ftblstates ON ce.stateid = ftblstates.id
WHERE (ce.expirydate != '') AND NOT ce.id IN (
SELECT TOP 10 tblclassifiedemployers.id
FROM tblclassifiedemployers
WHERE (ce.expirydate != '')
ORDER BY inserteddate desc)
ORDER BY inserteddate desc;
还有错误:
ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效,除非还指定了 TOP 或 FOR XML。
【问题讨论】:
你对错误信息有什么不明白的地方? 【参考方案1】:使用这个:
create view Department_View
as
select Name from [HumanResources].[Department]
order by Name offset 0 rows
【讨论】:
【参考方案2】:如果您使用的是 SQL Server 2012 或更高版本,请在 order by 后使用“offset 0 rows”。 前 -
create view Department_View
as
select Name from [HumanResources].[Department]
order by Name offset 0 rows
【讨论】:
【参考方案3】:我使用了以下结构:
SELECT
ROW_NUMBER() OVER (ORDER BY LASTNAME) SORTORDER,
*
FROM
CLIENT
【讨论】:
【参考方案4】:CREATE FUNCTION GetUnitIDWithScenarioCount
(
@calculatorType int
)
returns TABLE as
return
(
select count,unitid from(
SELECT Top 1
count(sc.UnitId) as count, sc.unitid
FROM scenarios SC
INNER JOIN npcstatus NPC
ON NPC.UnitId=SC.UnitId
INNER JOIN IPEDSCollegeData..hd hd
ON hd.UnitId=NPC.UnitId
WHERE npc.calculatorType=4
Group by sc.unitid
) as temp
order by count
)
【讨论】:
【参考方案5】:如上所述,ORDER BY 不得出现在子查询中,除非使用 TOP 或 FOR XML。
SELECT TOP 10 * FROM (
SELECT
c.id,
c.name,
c.inserteddate,
c.cityname,
ftblstates.name AS statename,
clc.name AS catname,
'' AS listingimagelogo,
'' AS orgname, relocateyn,
'' AS employerclassified
FROM tblclassifieds c
LEFT JOIN tblclassifiedscategories clc ON c.categoryid = clc.id
LEFT JOIN ftblstates ON c.stateid = ftblstates.id
WHERE c.expirydate != ''
AND NOT c.id IN (
SELECT TOP 10
tblclassifieds.id
FROM tblclassifieds
WHERE c.expirydate != ''
ORDER BY inserteddate desc
)
UNION ALL
SELECT
ce.id,
ce.name,
ce.inserteddate,
suburb AS cityname,
ftblstates.name AS statename,
ce.jobtype AS catname,
ce.listingimagelogo,
ce.orgname, '' AS relocateyn,
'1' AS employerclassified
FROM tblclassifiedemployers ce
LEFT JOIN ftblstates ON ce.stateid = ftblstates.id
WHERE ce.expirydate != ''
AND NOT ce.id IN (
SELECT TOP 10
tblclassifiedemployers.id
FROM tblclassifiedemployers
WHERE ce.expirydate != ''
ORDER BY inserteddate desc
)
) a ORDER BY inserteddate desc;
【讨论】:
通过删除两个额外的 order by 子句,我收到此错误:ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效,除非 TOP 或 FOR XML 也是指定。 @hallie - ORDER BY 可以出现在子查询中。您只需要在子查询中有 TOP 或 FOR XML,OP 似乎有。 @Biggs:对不起,我更新了脚本。抱歉,我没有数据,无法运行。 @Ben:你能再试一次吗?我删除了一些括号。 快到了!现在我收到错误:';' 附近的语法不正确。 @Ben:修复了查询。在子查询中添加别名。以上是关于SQL 错误“视图中的 ORDER BY 子句无效...”的主要内容,如果未能解决你的问题,请参考以下文章
求解!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!SQL Server 2012 出现以下错误:
ORACLE:错误错误(6,3):PL/SQL:SQL 语句被忽略和错误(8,3):PL/SQL:ORA-00933:SQL 命令未在过程中正确结束