繁体   English   中英

Oracle 11g Concat函数错误

[英]Oracle 11g Concat function error

我遇到此错误:

ORA-00904:“ LASTNAME”:无效的标识符

尝试使用concat函数进行报告时。 这是查询:

SELECT 'Full Name','User Name', 'Email' FROM Dual
UNION ALL
SELECT distinct concat(concat(firstname, ' '), lastname), username, Email
FROM
(
select distinct concat(concat(firstname, ' '), lastname), username, Email
from sas_aclentry, sas_usergroup 
where sas_aclentry.userkey = sas_usergroup.userkey
    and objecttype in (16,3,4,101,14,102) and productkey = 1 and type = 1 and privilege !=0 and isdeleted = 0 and STATUS IN (0, 32)
UNION
select distinct concat(concat(firstname, ' '), lastname), username, Email
from sas_objecttree 
    join sas_usergroup on sas_usergroup.userkey = sas_objecttree.childkey
where isdeleted = 0 and STATUS IN (0, 32)
     and parentkey in (
        select distinct sas_aclentry.userkey 
        from sas_aclentry
        join sas_usergroup on sas_usergroup.userkey = sas_aclentry.userkey
        where objecttype in (16,3,4,101,14,102) and productkey = 1 and type = 2 and privilege !=0 and isdeleted = 0)
)
WHERE UPPER(Email) LIKE '%SAS%';

在Google上徘徊,但找不到任何使之有效的方法。 请帮忙。 感谢任何输入。

错误似乎是您的外部查询尝试从派生表中选择姓氏,该表不公开具有该名称的任何列。 我猜您是要在派生表中的隐式列中使用别名并将其选中。

尝试将查询的开头更改为此:

SELECT 'Full Name','User Name', 'Email' FROM Dual
UNION ALL
SELECT fullname, username, Email
FROM
(
select distinct firstname || ' ' || lastname as fullname, username, Email

对于某些数据库,concat可以接受两个以上的参数,尽管我不确定这对Oracle是否适用,但是您应该能够使用串联运算符|| 并将嵌套的concat函数更改为此:

firstname || ' ' || lastname as fullname

这使得代码更加简洁。 (我还将尝试在使用显式联接时保持一致-在派生表中,对第一个查询使用隐式联接,对第二个查询使用显式联接)。

除了已经指出的以外,此查询中还有很多错误(您正在从子查询中选择“姓氏”,该子查询的投影不包含该名称的列)。

当您执行UNION时,联合的第一项必须具有列名或别名,这些列名或别名将用于联合的所有项。 从对偶中选择三个字符串(可能打算用作标题)是不够的,还必须给它们每个别名。 例如, select 'Full Name' as fullname, ... from dual 另外,您也可以将select... from dual保留下来,以便稍后在联合中使用。

“列标题”显示在查询顶部的事实并不意味着它们将位于结果集的顶部。 如果希望它们显示在结果的顶部,则必须使用ORDER BY子句(这也可能意味着您需要能够按顺序进行排序)。

在Union的“问题”部分,使用带有子查询的选择,名称和连接,在子查询中进行连接,然后在外部查询的选择列表中再次进行连接(假定与该查询相同的三列)子查询已串联)。 即使没有语法错误,也不会产生所需的结果。 您可能想做的是在子查询中进行串联(最好使用可以重复使用的||运算符,而不是Oracle中受限的concat() ); 将串联结果别名as fullname ,并在外部查询中选择fullname

解决这些问题后,其他问题可能会排在前面。 我(我们)无法测试,因为您未提供任何测试输入。 如果需要更多帮助,请跟进/回信。 祝好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM