Sql server 可以在视图中使用Order By

Sql server 可以在视图中使用Order By,sql-server,Sql Server,我正试图订购一个名为ListModePays的视图。以下是我在SQL中的观点 SELECT paiementEtranger.pays.nomPays, paiementEtranger.mode.pays, [... other columns ...] paiementEtranger.choixMode.hierarchie FROM paiementEtranger.choixMode INNER JOIN paiemen

我正试图订购一个名为ListModePays的视图。以下是我在SQL中的观点

SELECT
   paiementEtranger.pays.nomPays, 
   paiementEtranger.mode.pays,
   [... other columns ...]
   paiementEtranger.choixMode.hierarchie 
FROM            
   paiementEtranger.choixMode 
   INNER JOIN paiementEtranger.mode 
       ON paiementEtranger.choixMode.id = paiementEtranger.mode.mode 
   INNER JOIN paiementEtranger.pays 
       ON paiementEtranger.mode.pays = paiementEtranger.pays.id
WHERE
    (paiementEtranger.pays.supprime = 0) AND
    (paiementEtranger.mode.supprime = 0)
然后我尝试使用这个查询按视图的一部分排序

SELECT * FROM paiementEtranger.listeModePays 
WHERE pays="xxx" ORDER BY choixMode.hierarchie

当我在查询中添加ORDER BY choixMode.Hierarchy时,我得到一个多部分标识符choixMode.Hierarchy无法绑定错误。有人能帮忙吗

您的问题只是显示了一个SELECT语句,但您将其描述为一个视图-因此假设定义的语句是一个视图,您不需要表名-该视图有一个名为hierachie的列,该列来自choixMode表

所以,你只是想

SELECT * FROM paiementEtranger.listeModePays 
WHERE pays="xxx" 
ORDER BY hierarchie

您的问题只是显示了一个SELECT语句,但您将其描述为一个视图-因此假设定义的语句是一个视图,您不需要表名-该视图有一个名为hierachie的列,该列来自choixMode表

所以,你只是想

SELECT * FROM paiementEtranger.listeModePays 
WHERE pays="xxx" 
ORDER BY hierarchie

您仅从ListModePays中进行选择,因此无法使用choixMode中的内容进行订购-因此,请从此处删除choixMode,因为该列应具有与视图中的列相同的名称choixMode.Hierarchy,只需在select no choixMode中按层次结构排序-如果从viewSuggestion中选择,则该表没有任何意义。建议:在SQL中使用别名:…从LongTableName t中选择,然后可以在查询的其余部分使用t而不是LongTableName。这将稍微注意命名,使事情更清楚。@jamices s/Table/View/makes nodifference@Richard-哦,我以为你说的是为了从视图中选择。但是您完全正确,对于编写长select语句,您只从ListModePays中选择,因此您不能使用choixMode中的内容进行排序-因此,从那里删除choixMode,它应该可以工作,因为该列应具有与视图中的列相同的名称choixMode.Hierarchy,只需在select no choixMode中按层次结构排序-如果从viewSuggestion中选择,则该表没有任何意义。建议:在SQL中使用别名:…从LongTableName t中选择,然后可以在查询的其余部分使用t而不是LongTableName。这将稍微注意命名,使事情更清楚。@jamices s/Table/View/makes nodifference@Richard-哦,我以为你说的是为了从视图中选择。但是你绝对正确,因为你写了一个很长的select语句