2017-11-19 7 views
0
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); 

ich einen Fehler zu erstellen:Benötigen Sie Hilfe eine Ansicht

The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP, OFFSET or FOR XML is also specified.

Wie kann ich dieses Problem beheben?

+0

Aus dem Fehler, ich vermute, dass Sie Microsoft SQL Server nicht MySQL verwenden. Bitte ändere das Tag entsprechend, –

+2

Ich liebe, wie der Fehler dir genau sagt, was falsch ist, und du versuchst nicht, das zu ändern. – zipa

+1

Wie verwenden Sie diese Ansicht, wenn PeopleID nicht in den Spalten enthalten ist? Sie sollten auch eine Namenskonvention für Ansichten übernehmen, damit Sie wissen, dass es sich um eine Ansicht handelt, z. 'create view custowner_v' –

Antwort

3

Die Lösung hier ist, order by Klausel aus Ihrer Abfrage zu entfernen. Wenn Sie Ergebnisse in einer bestimmten Reihenfolge von name anzeigen möchten, können Sie dies tun, während Sie Daten aus der Sicht auswählen.

+0

Vielen Dank @Harshil, ich habe vergessen, Sie können nicht Order by Klausel in einer create view-Anweisung verwenden – jh86

+0

Genau mein Punkt. Sie können es als Antwort akzeptieren, wenn Sie möchten. –

0

Es gibt einen Weg, es zu tun, aber Sie sollten wahrscheinlich beraten, um es auf einer Ansicht zu bestellen. aber es hacken können Sie TOP 100 PROZENT in Ihrer SELECT-Anweisung

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); 

verwenden sollten Sie arbeiten jetzt