在Fullname列上进行SQL排序

Kev*_*vin 0 sql sql-server sql-server-2008

我有一个名为fullname列的表 userFullName

我正在尝试创建一个正确的select语句来显示下拉列表的"-Select User-"值,但是在userFullName字段中按结果名排序结果集.

我怎么能够:

  1. 得到正确的工作?
  2. 仍然保留-Select User-作为第一选择?

SQL语句:

SELECT
    0 As UserID, '-Select User-' As UsersName, '' As Surname 

UNION ALL

SELECT
    userID As UserID, userFullName As UsersName, 
    REVERSE(SUBSTRING(REVERSE([userFullName]), 0, CHARINDEX(' ', REVERSE([userFullName])))) As Surname 
FROM 
    vwSelectUser 
ORDER BY 
    REVERSE(SUBSTRING(REVERSE([userFullName]), 0, CHARINDEX(' ', REVERSE([userFullName]))))
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

消息207,级别16,状态1,行6
无效的列名称"userFullName".
消息207,级别16,状态1,行6
无效的列名称"userFullName". 如果语句包含UNION,INTERSECT或EXCEPT运算符,则
消息104,级别16,状态1,行6
ORDER BY项必须出现在选择列表中.

是的,userFullName是一个有效的专栏vwSelectUser

D S*_*ley 5

那么最好的方法是分别存储名字和姓氏,但是你得到的东西可以做到这一点:

SELECT * FROM 
(
    Select 0 As UserID, '-Select User-' As UsersName, CONVERT(VARCHAR(100),'') As Surname 
    Union All 
    Select userID As UserID, userFullName As UsersName, 
    REVERSE(SUBSTRING(REVERSE([userFullName]), 0, CHARINDEX(' ', REVERSE([userFullName])))) As Surname 
    From vwSelectUser 
) AS A
Order By Surname
Run Code Online (Sandbox Code Playgroud)