【问题标题】:Need help creating a view需要帮助创建视图
【发布时间】:2017-11-20 17:08:00
【问题描述】:
CREATE VIEW custowner
AS
   (SELECT        
        RTRIM(p.FirstName)+ ' ' + p.LastName AS [name], 
        LEFT(p.Phone, 12) AS phone, 
        p.CellPhone AS cellphone, 
        LEFT(p.EMail, 22) AS email
    FROM  
        CUSTOMER_OWNER co 
    INNER JOIN 
        PEOPLE p ON co.PeopleID = p.PeopleId
    ORDER BY 
        name ASC);

我收到一个错误:

ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效,除非还指定了 TOP、OFFSET 或 FOR XML。

我该如何解决这个问题?

【问题讨论】:

  • 从错误中,我猜你使用的是 Microsoft SQL Server 而不是 MySQL。请相应地更改标签,
  • 我喜欢错误告诉你究竟出了什么问题,而且你不要试图改变它。
  • 如果列中不包含 PeopleID,您将如何使用该视图?您还应该为视图采用命名约定,以便您知道它是一个视图,例如create view custowner_v
  • @Used_By_Already 好点。

标签: sql sql-server tsql


【解决方案1】:

这里的解决方案是从您的查询中删除order by 子句。如果您想以name 的特定顺序显示结果,您可以在从视图中选择数据时执行此操作。

【讨论】:

  • 谢谢@Harshil,我忘了你不能在创建视图语句中使用 order by 子句
【解决方案2】:

有一种方法可以做到这一点,但您可能应该按照建议在视图上订购它。 但是要破解它,您可以在 SELECT 语句中使用 TOP 100 PERCENT

create view custowner
as
(SELECT TOP 100 PERCENT     
rtrim(p.FirstName)+ ' ' + p.LastName as [name], 
left(p.Phone, 12) as phone, 
p.CellPhone as cellphone, 
left(p.EMail, 22) as email
FROM CUSTOMER_OWNER co INNER JOIN PEOPLE p
ON co.PeopleID = p.PeopleId
order by name ASC);

它现在应该可以工作了

【讨论】:

    猜你喜欢
    • 2020-10-29
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 2011-08-02
    • 2013-12-08
    相关资源
    最近更新 更多