我有以下sql代码:
select upper(regexp_substr(street1, '\S+$'))
但是我不知道我应该在哪里放置distinct关键字以在表中包含唯一值,因为我打印出许多重复值。
编辑 - 来自以下评论。
完成查询(错误):
select distinct UPPER(REGEXP_SUBSTR(STREET1, '\S+$'))
from HELENS_DATA
order by REGEXP_SUBSTR(STREET1, '\S+$') asc
错误讯息:
ORA-01791:不是SELECTed表达式01791. 00000 - “不是SELECTed表达式”*原因:*操作:行错误:3列:24
完成查询(有效):
select distinct UPPER(REGEXP_SUBSTR(STREET1, '\S+$'))
from HELENS_DATA
order by UPPER(REGEXP_SUBSTR(STREET1, '\S+$')) desc;
请注意,初始查询试图通过使用UPPer()函数将查询值更改为高位,但我怎么错误地忽略了ORDER BY子句中的函数,这不是'DISTINCT'的错误。
答案 0 :(得分:1)
distinct
总是在select
之后出现:
select distinct upper...
答案 1 :(得分:0)
你试过了吗?
SELECT DISTINCT upper(...)AS'Field Name'
如果您将正在执行此操作的字段命名为可能有效,并允许您使用DISTINCT。
答案 2 :(得分:0)
当你有DISTINCT
函数时,UPPER
失败很有意思。您可以尝试使用子查询来解决它:
SELECT DISTINCT Ending
FROM (select upper(regexp_substr(street1, '\S+$')) Ending) A
子查询确实不应该是必要的,这应该也可以,因为chue x推荐。
SELECT DISTINCT upper(regexp_substr(street1, '\S+$'))
答案 3 :(得分:0)
结束:
最初我已经在oracle数据库中运行代码,如下面的代码
完成查询(错误):
select distinct UPPER(REGEXP_SUBSTR(STREET1, '\S+$'))
from HELENS_DATA
order by REGEXP_SUBSTR(STREET1, '\S+$') asc;
结果我收到以下错误消息:
ORA-01791: not a SELECTed expression 01791. 00000 - "not a SELECTed expression"
*Cause: *Action: Error at Line: 3 Column: 24
上面的答案帮助我找出了我忽略的错误,以下代码是完成的SQL查询,它运行正常。
完成查询(有效):
select distinct UPPER(REGEXP_SUBSTR(STREET1, '\S+$'))
from HELENS_DATA
order by UPPER(REGEXP_SUBSTR(STREET1, '\S+$')) desc;
请注意,初始查询试图通过使用UPPer()函数将查询值更改为高位,但我怎么错误地忽略了ORDER BY子句中的函数,这不是'DISTINCT'的错误。
结论是,无论SELECT子句有什么参数,其他可能的条款,例如:在哪里,ORDER BY ...等也应该具有相同的模式或相同的值。
感谢大家。
答案 4 :(得分:0)
您不必重复ORDER BY
子句中的代码。无论您在SELECT
列表中定义了哪些别名,都可以在ORDER BY
中使用:
SELECT DISTINCT
UPPER(REGEXP_SUBSTR(street1, '\S+$')) AS street1_upper
FROM
HELENS_DATA
ORDER BY
street1_upper DESC;