0

私はオラクルにほぼ完成したSQLスクリプトを持っていますが、最後の問題で立ち往生しています。

データにアクセスしている2つのデータベーステーブルがあり、新しい行をデータベースの新しいテーブルに挿入しています。データベース テーブルの 1 つには口座番号列と記述子列があり、各口座番号には 3 つの記述子値があり、すべて同じ形式です。データを取得したい 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 つの行から異なる列のデータが必要な場合、データが同じ行にあると予想されるためだと思います。and ステートメントを使用すると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 ステートメントを残しました。それが私が得ることができる最も近いものです。

さらに情報が必要な場合は、お知らせください。

4

3 に答える 3

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

于 2013-10-28T19:24:47.030 に答える
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
于 2013-10-28T19:25:51.630 に答える