2016-07-07 5 views
1

나는 결과 데이터를 어떻게 바꾸는 지 알아 내려고하고있다. 이는 DB2의 Z/OS 그리고 우리는테이블을 동적으로 전치시키기

난 항상 테이블 A는 (로 현재 약 30 컬럼, 그러나 여기에만 3 개)를 지정해야합니다 버전 11. 실행중인 : 다음

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

결과 테이블을 보면 두 테이블의 데이터를 결합하는 방법이 실제로 명확하지 않습니다. 나는 당신이해야 할 일이 무엇인지 직접적으로 완전한 외부 조인을 생각했을 것이다. 그러나 'Y'가 예상되는 'Is_null'에서 빈 값을보고 'Product_name'과 'Product_status'의 값이 혼합 된 것을 볼 수있다. '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; 

이 두 번째 쿼리는 게시 된 수정 버전이 추가 열이 확대되어 그러나 경우, 표현을, 이것은 아마도 더 가능성이있을 것입니다 너를 위해 버기 좋다.

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;