2017-08-22 45 views
0

我有一個名爲Issue_Status的專欄,它列出了風險管理中主要涉及的問題的當前狀態。我需要在Cognos和/或SQL Server中創建一個新列,以呈現問題的所有先前狀態的連接列。它是這樣的。如果您從單列中獲取數據,如何創建連接列?

現在,我沒有Issue_Status_Concatenated。

它是這樣的。

Issue I.D Issue Status 

1234  Draft   
1234  Open   
1234  Closed   
5678  Draft   
5678  Pending   
5678  Closed   
5678  Cancelled  
3333  Draft   
3333  Pending   
3333  Pending   
3333  Pending   

我想用一個運行中的計數功能(COGNOS功能)

Issue I.D Issue Status   Running_Count 

1234  Draft    1 
1234  Open     2 
1234  Closed    3 
5678  Draft    1 
5678  Pending    2 
5678  Closed    3 
5678  Cancelled   4 
3333  Draft    1 
3333  Pending    2 
3333  Pending    3 
3333  Pending    4 

然後使用的情況下,功能

New Concat_Column 1 

case when Running_Count = 1 then Issue_status else ' ' end 

New Concat_Column 2 

case when Running_Count = 2 then Issue_status else ' ' end 

New Concat_Column 3 

case when Running_Count = 3 then Issue_status else ' ' end 

New Concat_Column 4 

case when Running_Count = 4 then Issue_status else ' ' end 

然後我計劃將結果合併一列中創建一個新的數據項或一個新的列,方法是創建Issue_Status_Concatenated,將所有新的concat列從1到

New Concat_Column 1 + '|' + New Concat_Column 2 + '|' + New Concat_Column 3 + '|' + New Concat_Column 4 

我知道這是一個漫長的過程,但我知道可以有一個更簡單和合乎邏輯的方式來做到這一點?有沒有辦法讓這個更簡單?

Issue I.D Issue Status Issue_Status_Concatenated 

    1234  Draft   Draft | Open | Closed 
    1234  Open   Draft | Open | Closed 
    1234  Closed   Draft | Open | Closed 
    5678  Draft   Draft | Open | Closed |Cancelled 
    5678  Pending   Draft | Open | Closed |Cancelled 
    5678  Closed   Draft | Open | Closed |Cancelled 
    5678  Cancelled  Draft | Open | Closed |Cancelled 
    3333  Draft   Draft | Pending 
    3333  Pending   Draft | Pending 
    3333  Pending   Draft | Pending 
    3333  Pending   Draft | Pending 
+2

請選擇正確的數據庫系統..不要標記mysql,sql-server和oracle11g –

+0

確定完成。我不確定我們當前使用的是哪種RDBMS,如果它是sql server或Oracle 11g – BA82283

+0

您的實際期望輸出是什麼?您帖子的結尾看起來不像您想要的。你想爲每個問題狀態值設置一個不同的列嗎?或者你真的想要一個單獨的字段與給定問題的每個值分隔嗎? –

回答

1

下方代碼段將幫助您獲取設計在oracle中輸出rd。希望這可以幫助。

SELECT ID, 
    STAT, 
    LISTAGG(STAT,'|') WITHIN GROUP(
ORDER BY STAT) OVER(PARTITION BY ID) AGG_STAT 
FROM 
    (WITH TMP AS 
    (SELECT 1234 id, 'Draft' Stat FROM dual 
    UNION ALL 
    SELECT 1234 ID, 'Open' STAT FROM DUAL 
    UNION ALL 
    SELECT 1234 id, 'Completed' Stat FROM dual 
    UNION ALL 
    SELECT 1100 ID, 'Draft' STAT FROM DUAL 
    UNION ALL 
    SELECT 1100 ID, 'Pending' STAT FROM DUAL 
    UNION ALL 
    SELECT 1100 ID, 'Completed' STAT FROM DUAL 
    UNION ALL 
    SELECT 1100 id, 'Closed' Stat FROM dual 
) 
SELECT tmp.*,ROW_NUMBER() OVER(PARTITION BY ID ORDER BY 1 DESC) RN FROM tmp 
); 
0

的行對於SQL服務器,你可以使用下面的查詢,讓您的結果 -

Create table #IssueLog (
[Issue I.D] int , 
[Issue Status] varchar(10) 
) 

insert into #IssueLog 
select 1234 ,  'Draft' 
union all select 1234,  'Open'   
union all select 1234,  'Closed'   
union all select 5678,  'Draft'   
union all select 5678,  'Pending'   
union all select 5678,  'Closed'   
union all select 5678,  'Cancelled'  
union all select 3333,  'Draft'   
union all select 3333,  'Pending'   
union all select 3333,  'Pending'   
union all select 3333,  'Pending' 


Select Main.[Issue I.D], 
     Left(Main.[Issues],Len(Main.[Issues])-1) As [Issues] 
From 
    (
     Select distinct T2.[Issue I.D] , 
      (
       Select T1.[Issue Status] + '|' AS [text()] 
       From #IssueLog T1 
       Where T1.[Issue I.D] = T2.[Issue I.D] 
       ORDER BY T1.[Issue I.D] 
       For XML PATH ('') 
      ) [Issues] 
     From #IssueLog T2 
    ) [Main] 
相關問題