我试图通过coalesce函数获取一些查询结果但是当它给我多个值时它会产生oracle错误。这些是我的疑问:
SELECT COALESCE((select GRPNAME from CMS_NODGRP where upper(NODEID)=UPPER('unsolwa33')), 'Without_Node') || ' 134unixadmin' || ' available' FROM DUAL;
有人可以帮我提供输出欲望(如下):
Without Node 123winadm availabe
Node2 unsolwa33 availabe
Node1 unsolwa33 availabe
Node4 unsolwa33 availabe
错误是:
ORA-01427: single-row subquery returns more than one row
表格应为:
GRPNAME NODEID
------------------------
GroupA NodeA
GroupB NodeA
GroupB NodeB
GroupC NodeC
如果我进行查询并且它给了我:
,我希望如此NodeD,WithoutNodeID
NodeA, GroupA
NodeA, GroupB
NodeB, GroupB
NodeC, GroupC
非常感谢!
答案 0 :(得分:0)
您的问题不是public override completeAttributeRef_AttributeRef(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
val classID = (model as AttributeRef).cosem.classid
val CosemClasseManager = new CosemClasses()
var proposal = CosemClasseManager.getAttributeString(classID)
for (String s : proposal) {
acceptor.accept(createCompletionProposal(s, s, null , context))}
}
,而是子查询。
这可能是你想要的:
COALESCE()
答案 1 :(得分:0)
你可以这样做:
select coalesce(cng.grpname, dummy.col1) || ' 134unixadmin' || ' available' node_availability
from (select 'Without Node' col1 from dual) dummy
left outer join (select grpname
from cms_nodgrp
where upper(nodeid) = upper('unsolwa33')) cng on (1=1);
这有点像交叉连接,但是如果没有从cng子查询返回的行,则将始终返回虚拟子查询中的行。这样,您就可以使用coalesce来决定输出什么。
N.B。这将返回cng子查询返回的行数。如果您确实只想返回一行,则可以随时添加and rownum = 1
,或者如果您知道所有行都具有相同的grpname,则可以在选择列表中使用DISTINCT
。
并证明上述查询确实有效:
对于不存在的nodeid:
WITH cms_nodgrp AS (SELECT 'unsolwa33' nodeid, 'abc' grpname FROM dual UNION ALL
SELECT 'unsolwa33' nodeid, 'def' grpname FROM dual UNION ALL
SELECT 'unsolwa44' nodeid, 'egh' grpname FROM dual)
-- end of mimicking some data in your table. See SQL below:
select coalesce(cng.grpname, dummy.col1) || ' 134unixadmin' || ' available' node_availability
from (select 'Without Node' col1 from dual) dummy
left outer join (select grpname
from cms_nodgrp
where upper(nodeid) = upper('not exists')) cng on (1=1);
NODE_AVAILABILITY
-----------------------------------
Without Node 134unixadmin available
对于可用的nodeid:
WITH cms_nodgrp AS (SELECT 'unsolwa33' nodeid, 'abc' grpname FROM dual UNION ALL
SELECT 'unsolwa33' nodeid, 'def' grpname FROM dual UNION ALL
SELECT 'unsolwa44' nodeid, 'egh' grpname FROM dual)
-- end of mimicking some data in your table. See SQL below:
select coalesce(cng.grpname, dummy.col1) || ' 134unixadmin' || ' available' node_availability
from (select 'Without Node' col1 from dual) dummy
left outer join (select grpname
from cms_nodgrp
where upper(nodeid) = upper('unsolwa33')) cng on (1=1);
NODE_AVAILABILITY
-----------------------------------
abc 134unixadmin available
def 134unixadmin available