我的数据看起来像这样:
Column_1
'(A) Top Sort'
'(B) Second Sort'
'(C) Third custom Sort'
添加了这些字母以允许客户排序。我有很多不仅仅是三个字母,但我会把完整的一套用于示例。
我这样做只显示文字:
Select
right(Column_1, len(column_1) -4) as 'Column_1'
from Table_1
order by Column_1 ASC
但结果是右边的排序(Column_1,len(column_1)-4),而不是完整字段:
Column_1
Second Sort
Third Custom Sort
Top Sort
我快疯了。我想通过查询中未显示的内容对其进行排序。不知道该怎么做。如何通过完整字符串对此进行排序并仅显示字符串的一部分?
编辑 - 这是联盟所有声明的最重要部分。只有一个其他部分,它将永远是最后一个(字母Z)
只需在order by
中包含表别名:
Select right(Column_1, len(column_1) -4) as Column_1
from Table_1
order by table_1.Column_1 ASC;
问题是Column_1
本身可以引用SELECT
中定义的别名或表中的列。您的SQL引擎正在将其解析为别名。
另一种解决方案是只为列提供不同的别名,因此没有命名冲突:
Select right(Column_1, len(column_1) -4) as new_Column_1
from Table_1
order by Column_1 ASC;
因为在Column_1
列表中找不到SELECT
,所以名称将解析为表格中的列。
你不能用union all
声明做到这一点。为此,您需要一个子查询:
select . . ., right(Column_1, len(column_1) -4) as column_1
from ((select . . ., column_1 -- no SUBSTRING!
from table1
) union all
(select . . .
)
) t
order by t.column_1;