2016-07-07 7 views
1

私は結果データを転記する方法を理解しようとしています。これは、DB2 Z/OSだと私たちはバージョン11テーブルを動的に転位する

を実行している私はいつもA(現在約30の列が、ここでは3つだけのとおり)指定されたテーブルがあるでしょう:

Table A 
Column_name Column_id Data_type NULL 
Product_id   1   N  N 
Product_name  2   A  N 
Product_status  3   A  Y 

、その後、表Bサイズが変わる可能性があります。

Table B 
Product_id Product_name Product_status 
    101  'First'   NULL 
    102  'Second'  'Inactive' 
    103  'Third'   'Active' 

私が欲しいのは以下の通りです:

Result table 
Product_number Column_number Num_value Alpha_value Is_NULL 
    101    1   101  
    101    2      'First' 
    101    3         'Y' 
    102    1   102  
    102    2      'Second' 
    102    3      'Inactive'  
    103    1   103  
    103    2      'Third' 
    103    3      'Active' 

私の考えは、私は、インデックスによって表Bの列にアクセスすることができれば、私はテーブルをループにできるようにし、結果表を作成しなければならないことです。また、再帰的なSQLでは可能であるべきだと考えていますが、インデックスで列を参照できる必要があります。

アイデア?

編集: 表Aは、列が数値か英数字か、そしてNULLかどうかを定義するものとします。現実には、私が懸念している限り簡単な部分ですから、基本的には次のような情報を得ています。

Product_number Column_number Value 
    101    1   '101'  
    101    2   'First' 
    101    3   'NULL'  -- Could of course just exclude this line to show that Product_status is NULL for Product_id 101 
    102    1   '102'  
    102    2   'Second'  
    102    3   'Inactive' 
    103    1   '103'  
    103    2   'Third' 
    103    3   'Active'  
+0

各タイプごとに選択するUNION ALLを使用して実行できます。 – jarlh

+0

@jarlh大まかな例を教えてもらえますか? – bek

+0

結果テーブルを見ると、両方のテーブルのデータをどのように組み合わせようとしているのかは分かりません。私は単純な完全な外部結合があなたがしなければならないものだと思っていたが、 'Is'が 'Y'のところで 'Product_name'と 'Product_status'の値が混在している 'Is_null' 'Alpha_value'にあります。両方のテーブルのデータをどのように組み合わせるかをより正確に説明できますか? –

答えて

0

この最初のクエリは、最初に要求されたテーブルを表します

select 
    b.product_id "Product_number", 
    a.column_id "Column_number", 
    case 
     when a.data_type = 'N' then b.product_id else null 
    end "Num_value", 
    case 
     when (a.data_type = 'A' and a.column_id = 2) then b.product_name 
     when (a.data_type = 'A' and a.column_id = 3) then b.product_status else null 
    end "Alpha_value", 
    case 
     when a.NULL_ = 'Y' and b.product_Status is null then 'Y' else null 
    end "Is_NULL" 
from b, a 
order by 1, 2; 

この2番目のクエリは、あなたが投稿し修正したバージョンを表し、あなたは追加の列のためにこれを拡大しているがあれば、これはおそらく可能性が高くなりますあなたのためにバギーになる。

select 
    b.product_id "Product_number", 
    a.column_id "Column_number", 
    case 
     when a.data_type = 'N' then to_char(b.product_id) 
     when (a.data_type = 'A' and a.column_id = 2) then to_char(b.product_name) 
     when (a.data_type = 'A' and a.column_id = 3) then to_char(b.product_status) 
     when a.NULL_ = 'Y' and b.product_Status is null then 'Y' 
     else null 
    end "Value" 
from b, a 
order by 1, 2; 
関連する問題