2013-01-17 25 views
0

我正在創建我的Universe中的三個變量。這些變量是應用程序,操作系統和物理位置。我遇到的問題是,所有這三個都是從同一個表中提取的,並且它們都在Value內。我需要從1個變量創建3個變量SQL Oracle SAP

所以表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' 

「Applications Relationship」派生表

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 

我試圖想辦法將所有這些作爲單獨的變量拉入到一個派生表中,但到目前爲止我一直不成功。任何想法或建議,將不勝感激。我是新人,所以讓我知道是否有任何事情可以讓我的問題更好。

+0

這不是真的清楚你要達到什麼樣的,但我有一個想法,其他人的答案略有不同。你可以添加一些樣本數據和預期結果來澄清,並解釋'CI_RELATED_CI'如何適合?顯示包括連接在內的整個查詢將比「case」更有用。此外,你的「派生表」的意見? –

回答

0
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; 
+0

當我檢查任一解決方案的語法「每個計算列必須有明確的名稱」時,我總是收到錯誤。謝謝! –

0
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 
+0

我不確定是否還有其他值的事實,但謝謝您的想法! –

+0

仍然如果你得到錯誤,請分享錯誤的查詢,這樣就會知道wt的問題 – Dileep

0

不知道如果我理解正確,這是你想要的...這是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   
.....