【问题标题】:I need to Create 3 Variables from 1 Variable SQL Oracle SAP我需要从 1 个变量 SQL Oracle SAP 创建 3 个变量
【发布时间】:2013-01-17 20:10:13
【问题描述】:

我正在我的宇宙中创建三个变量。这些变量是应用程序、操作系统和物理位置。我遇到的问题是这三个都是从同一个表中提取的,并且都在 Value 中。

所以表BMC_CORE_BMC_BASERELATIONSHIP 具有变量名称。当名称等于 SYSTEMOS 时,我正在尝试提取操作系统的所有目标实例 ID。

我的第一个客人是使用派生表,这三个表中的每一个都是具有以下编码的单独表

“操作系统关系”派生表

SELECT
BMC_CORE_BMC_BASERELATIONSHIP.DESTINATION_INSTANCEID 
FROM 
BMC_CORE_BMC_BASERELATIONSHIP 
Where 
BMC_CORE_BMC_BASERELATIONSHIP.Name = 'SYSTEMOS'

“物理位置关系”导出表

SELECT
BMC_CORE_BMC_BASERELATIONSHIP.DESTINATION_INSTANCEID 
FROM 
BMC_CORE_BMC_BASERELATIONSHIP 
Where 
BMC_CORE_BMC_BASERELATIONSHIP.Name = 'ELEMENTLOCATION'

“应用关系”派生表

SELECT
BMC_CORE_BMC_BASERELATIONSHIP.DESTINATION_INSTANCEID 
FROM 
BMC_CORE_BMC_BASERELATIONSHIP 
Where 
BMC_CORE_BMC_BASERELATIONSHIP.Name = 'APPLICATIONSYSTEMCOMPUTER'

但是,当我尝试使用以下语法拉入变量时,Webi 中只会显示其中一个变量。我发现其他的都被清空了。

App Var

Case 
WHEN CI_RELATED_CI.INSTANCEID ="Applications Relationship".DESTINATION_INSTANCEID
Then CI_RELATED_CI.NAME
END

Location Var

CASE
WHEN CI_RELATED_CI.INSTANCEID = "Physical Location Relationship".DESTINATION_INSTANCEID
THEN CI_RELATED_CI.NAME
END

OS Var

Case 
WHEN CI_RELATED_CI.INSTANCEID ="Operating System Relationship".DESTINATION_INSTANCEID
Then CI_RELATED_CI.NAME
END

我试图想办法将所有这些作为单独的变量放入一个派生表中,但到目前为止我一直没有成功。任何想法或建议将不胜感激。我是新人,如果有什么可以让我的问题变得更好,请告诉我。

【问题讨论】:

  • 虽然我有一个想法,但不太清楚您要达到的目标,而其他人的答案略有不同。您能否添加一些示例数据和预期结果来澄清,并解释CI_RELATED_CI 是如何适应的?显示包括连接在内的整个查询比只显示case 更有用。另外,您的“派生表”视图是什么?

标签: sql oracle sap business-objects


【解决方案1】:
you can use case like below or Decode, 

select Case 
WHEN BMC_CORE_BMC_BASERELATIONSHIP.Name = 'SYSTEMOS'
Then BMC_CORE_BMC_BASERELATIONSHIP.DESTINATION_INSTANCEID
WHEN BMC_CORE_BMC_BASERELATIONSHIP.Name = 'ELEMENTLOCATION'
Then BMC_CORE_BMC_BASERELATIONSHIP.DESTINATION_INSTANCEID
When BMC_CORE_BMC_BASERELATIONSHIP.Name = 'APPLICATIONSYSTEMCOMPUTER'
Then BMC_CORE_BMC_BASERELATIONSHIP.DESTINATION_INSTANCEID
Else 'Ur Comments'
END
from BMC_CORE_BMC_BASERELATIONSHIP;

or Decode 

select Decode( BMC_CORE_BMC_BASERELATIONSHIP.Name,'SYSTEMOS',BMC_CORE_BMC_BASERELATIONSHIP.DESTINATION_INSTANCEID,'ELEMENTLOCATION',BMC_CORE_BMC_BASERELATIONSHIP.DESTINATION_INSTANCEID,'APPLICATIONSYSTEMCOMPUTER',BMC_CORE_BMC_BASERELATIONSHIP.DESTINATION_INSTANCEID,else) from BMC_CORE_BMC_BASERELATIONSHIP;

【讨论】:

  • 当我检查任一解决方案的语法“每个计算的列必须有一个明确的名称”时,我一直收到错误消息。谢谢!
【解决方案2】:
am able to get the out put 

create table BMC_CORE_BMC_BASERELATIONSHIP (name1 varchar2(100),id number);

insert into BMC_CORE_BMC_BASERELATIONSHIP (name1,id) values('SYSTEMOS',1);

insert into BMC_CORE_BMC_BASERELATIONSHIP (name1,id) values('ELEMENTLOCATION',2);

insert into BMC_CORE_BMC_BASERELATIONSHIP (name1,id) values('APPLICATIONSYSTEMCOMPUTER',3);

select Case 
WHEN Name1 = 'SYSTEMOS'
Then id
WHEN Name1 = 'ELEMENTLOCATION'
Then id
When Name1 = 'APPLICATIONSYSTEMCOMPUTER'
Then id
Else id
END
from BMC_CORE_BMC_BASERELATIONSHIP ;
o/p #
1
2
3

select Decode(Name1,'SYSTEMOS',id,'ELEMENTLOCATION',id,'APPLICATIONSYSTEMCOMPUTER',id,id) 
from BMC_CORE_BMC_BASERELATIONSHIP;
o/p #
1
2
3

【讨论】:

  • 我不确定是否还有其他值,但感谢您的想法!
  • 如果你仍然遇到错误,请分享有错误的查询,以便了解问题所在
【解决方案3】:

不确定我是否正确理解您,这就是您想要的... 这是 Oracle 示例,其中每列都有自己的名称或标签。您可以将表创建为选择 - 只需在选择之前添加创建表,您的列名将是标签名称:

SELECT ename, empno, 
   (CASE deptno WHEN 10 THEN 'Accounting' END) dept10
 , (CASE deptno WHEN 20 THEN 'Research' END)   dept20
 , (CASE deptno WHEN 30 THEN 'Sales' END)      dept30
 , (CASE deptno WHEN 40 THEN 'Operations' END) dept40
FROM scott.emp
ORDER BY ename
/
ENAME   EMPNO   DEPT10      DEPT20     DEPT30     DEPT40
---------------------------------------------------------------------
ADAMS   7876                Research        
ALLEN   7499                           Sales    
BLAKE   7698                           Sales    
CLARK   7782    Accounting          
.....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    相关资源
    最近更新 更多