【问题标题】:The ORDER BY clause is invalid in views Msg 1033, Level 15, State 1, Line 64视图中的 ORDER BY 子句无效 Msg 1033, Level 15, State 1, Line 64
【发布时间】:2021-03-18 14:47:43
【问题描述】:
SELECT DISTINCT 
    t1.Movie, t1.Genre, t1.Author, t1.[Watch Date] 
FROM
    (SELECT 
         m.[Name] AS Movie, mg.Genre, a.Author, 
         [Watch Date] = CONVERT(VARCHAR, wh.[Watch Date], 107)
     FROM 
         Movie m, [Movie Genres] mg, Author a, [Watch History] wh
     WHERE 
         Genre LIKE '%TV Shows%' 
         AND m.GenreID = mg.Id 
         AND m.AuthorID = a.Id 
         AND m.Id = wh.MovieId
     ORDER BY 
         [Watch Date] DESC) t1 --LINE 64
GROUP BY 
    t1.Movie

我收到此错误:

消息 1033,第 15 级,状态 1,第 64 行
ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效,除非还指定了 TOP、OFFSET 或 FOR XML。

我正在尝试选择具有不同电影名称的表的第一个数据。 所以我想存储每部电影的每一个 FIRST 记录

【问题讨论】:

  • 这能回答你的问题吗? SQL Error with Order By in Subquery
  • Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI JOIN 语法-92 SQL 标准(25 多年前),不鼓励使用它
  • 查看cross apply 的解决方案,在this question/answer 中解释。
  • 大概一部电影也可以有多种类型。哪里有多个,你要显示哪一个?另外,您将日期转换为 varchar 是否有任何特殊原因?

标签: sql-server tsql


【解决方案1】:

试试:

;with t1 
as(SELECT 
         m.[Name] AS Movie, mg.Genre, a.Author, 
         [Watch Date] = CONVERT(VARCHAR, wh.[Watch Date], 107)
     FROM 
         Movie m, [Movie Genres] mg, Author a, [Watch History] wh
     WHERE 
         Genre LIKE '%TV Shows%' 
         AND m.GenreID = mg.Id 
         AND m.AuthorID = a.Id 
         AND m.Id = wh.MovieId) 

SELECT DISTINCT 
    t1.Movie, t1.Genre, t1.Author, t1.[Watch Date] 
FROM t1  
GROUP BY t1.Movie
ORDER BY [Watch Date] DESC

当您发布问题时,请与我们分享您的表结构(CREATE TABLE ...)和一些示例数据(INSERT INTO ...) 以及您的预期结果。这样我们才能找到正确的方向并进行一些测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 2020-11-18
    相关资源
    最近更新 更多