2013-10-28 54 views
0

我在oracle中有一個SQL腳本,它幾乎完成,但我被困在最後一個問題上。將1列中的2列值合併到新表中的新行中 - SQL

我有2個數據庫表我正在訪問數據,並將新行插入到我的數據庫的新表中。 其中一個數據庫表有一個帳號列和一個描述符列,每個帳號都有3個描述符值,全部使用相同的格式。還有第三列,我想從中獲取數據。這裏是一個可視化:

Account # | Descriptor   | Value 
1   Cost Center: ASDF  CC123 
1   Company: ASDF123  F123 
1   Fund: JKL    R123 
2   Cost Center: ASDF12 CC456 
2   Company: ASDF456  F456 
2   Fund: JKL23   R456 

我想我最後的表是這樣的:

Account_Number | Company_Description | Cost_Center_Value 
1    Company: ASDF123   CC123 
2    Company: ASDF456   CC456 

的Cost_Center_Value列和Company_Description列來自不同行,但相同的帳戶對象中的元素。

我遇到的問題是我有一個特殊的where子句來幫助我僅提取帶有'Company:'文本的描述符行。如果我輸入AND,表格根本沒有填充,我認爲是因爲它希望數據在同一行,當我需要來自2行但不同列的數據時。如果我使用和OR語句,它會添加一個全新的行。

這裏是我的腳本:

create table mydb.test1 as 
select distinct substr(testdb.table1.FAO, 1) as Account_Number, 
     'CM' || substr(testdb.table1.DESCRIPTOR, 18) as Division, 
     substr(testdb.table1.value, 1) as Department, 
     substr(testdb.table2.Workday_Description, 1) as Description, 

    from testdb.table1 
     join testdb.table2 
      on testdb.table1.fao = testdb.table2.workday_number 
      where testdb.table2.descriptor like 'Company for%' 
      OR testdb.table1.value like 'CC%' 
      order by Account_Number Desc 

我離開了OR語句中有顯示什麼我一直在玩弄。 這是我能得到的最接近的。

如果需要更多信息,請告訴我。

+0

爲什麼你的問題的說明顯示單表,但你的查詢嘗試有兩個表,有幾個未提及的列? – Laurence

+0

@Laurence - 我只把重要的東西放在帖子裏。我不認爲其他表和列是必要的,但我可以根據需要添加它們。 – RXC

回答

1

真正的答案是瞭解正常的形式並重新設計這個數據庫。但是你可以做一些可怕的,如:

Select 
    Account_Number, 
    max(Case 
     When Descriptor Like 'Company: %' then substr(Descriptor, 10, 1000) 
    end) Company_Description, 
    max(Case 
     When Descriptor Like 'Cost Center: %' then value 
    end) Cost_Center_Value 
From 
    test -- this is the table in the example section 
Group By 
    Account_Number 

Example SQLFiddle

1

您可以創建一個子查詢,只選擇賬號和每個賬戶的成本中心值,然後查詢該。

這不是完美的,但它可能給你的一個想法,我在想什麼:

create table mydb.test1 as 
select distinct substr(testdb.table1.FAO, 1) as Account_Number, 
     'CM' || substr(testdb.table1.DESCRIPTOR, 18) as Division, 
     substr(testdb.table1.value, 1) as Department, 
     substr(testdb.table2.Workday_Description, 1) as Description, 

    from testdb.table1 
     join (
     select [ACCOUNT], [COST_CENTER_VALUE] 
     from [TABLE] 
     where Descriptor LIKE 'Cost Center%') a 
     on a.account_number = table1.account_number 
1

嘗試此查詢:

create table mydb.test1 as 
select distinct 
account as Account_Number, 
(select (case when t2.Description like 'Company%' then t2.description end) from testdb.table1 t2 where t1.account=t2.account and 
case when t2.Description like 'Company%' then t2.description end is not null)as Company_Description , 
(select (case when t2.Description like 'Cost Center%' then t2.value end) from testdb.table1 t2 where t1.account=t2.account and 
case when t2.Description like 'Cost Center%' then t2.value end is not null)as Cost_Center_Value 
from testdb.table1 t1; 
相關問題