1

我有以下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”的错。

4

5 回答 5

1

distinct总是紧随其后select

select distinct upper...
于 2013-05-12T01:39:50.907 回答
0

你有没有尝试过:

SELECT DISTINCT upper(...) AS '字段名称'

如果您将执行此操作的字段命名为可能有效并允许您使用 DISTINCT。

于 2013-05-12T02:09:28.427 回答
0

有趣的是,当您拥有该功能DISTINCT时会失败。UPPER您可以尝试使用子查询来解决它:

SELECT DISTINCT Ending
FROM (select upper(regexp_substr(street1, '\S+$')) Ending) A

不过,子查询确实不是必需的,这也应该像 chue x 推荐的那样工作。

SELECT DISTINCT upper(regexp_substr(street1, '\S+$'))
于 2013-05-12T02:12:39.227 回答
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 子句有什么参数,其他潜在的子句,例如 WHERE、ORDER BY ... 等也应该具有相同的模式或相同的值。

谢谢大家。

于 2013-05-12T09:56:08.570 回答
0

您不必重复ORDER BY子句中的代码。无论您在SELECT列表中定义什么别名,都可以用于ORDER BY

SELECT DISTINCT 
    UPPER(REGEXP_SUBSTR(street1, '\S+$'))  AS street1_upper 
FROM
    HELENS_DATA
ORDER BY
    street1_upper DESC;
于 2013-05-12T10:32:31.597 回答