2017-04-17 52 views
0

我有表(EMP_EIT_EXT):逆透視查詢與下面的多列

EMPLOYEE_NUMBER Next Academic Rank Max Academic Rank Max Score Academic Rank Promotion Rank ACADEMIC_RANK_START_DATE ACADEMIC_RANK_END_DATE Income_code Date(YYYY) Date(MON) Date(DD) Amount Tax? INCOME_START_DATE INCOME_END_DATE 
--------------- ------------------ ------------------ ---------- ------------- -------------- ------------------------ ------------------  ----------- --------- --------- --------- ------ ----- ----------------- ------------------- 
33333   Professor   Y     10.1  Ass.Professor Y    01-JAN-2017    31-DEC-4712    P   2017  JAN   01   10000 Tax  01-JAN-2017   31-DEC-4712 
44444   Ass.Professor  N     9.7   Student   N    01-JAN-2017    31-DEC-4712    R   2017  JAN   17   50000 Non-Tax 01-JAN-2017   31-DEC-4712 

我怎樣才能UNPIVOT這使它在垂直方向像下面?

EMPLOYEE_NUMBER  EXTRA_INFORMATION  INFORMATION_CATEGORY INFORMATION1 INFORMATION2 INFORMATION3 
------------------- --------------------- ---------------------- -------------- ------------- ------------ 
33333    Academic Rank   Next Academic Rank  Professor  Y    10.1   
33333    Academic Rank   Academic Rank   Ass.Professor N    Y   
33333    Academic Rank   Effective Start Date 01-JAN-2017  (NULL)   (NULL)  
33333    Academic Rank   Effective End Date  31-DEC-4712  (NULL)   (NULL)  
33333    Alien Income Forecast Income_code    P    (NULL)   (NULL)  
33333    Alien Income Forecast Date     2017   01    JAN   
33333    Alien Income Forecast Amount     10000   Tax    (NULL)  
33333    Alien Income Forecast Effective Start Date 01-JAN-2017  (NULL)   (NULL)  
33333    Alien Income Forecast Effective End Date  31-DEC-4712  (NULL)   (NULL)  
44444    Academic Rank   Next Academic Rank  Ass.Professor N    9.7   
44444    Academic Rank   Academic Rank   Student   N    (NULL)  
44444    Academic Rank   Effective Start Date 01-JAN-2017  (NULL)   (NULL)  
44444    Academic Rank   Effective End Date  31-DEC-4712  (NULL)   (NULL)  
44444    Alien Income Forecast Income_code    R    (NULL)   (NULL)  
44444    Alien Income Forecast Date     2017   17    JAN   
44444    Alien Income Forecast Amount     50000   Non-Tax   (NULL)  
44444    Alien Income Forecast Effective Start Date 01-JAN-2017  (NULL)   (NULL)  
44444    Alien Income Forecast Effective End Date  31-DEC-4712  (NULL)   (NULL)  

樣品DDL和DML

CREATE TABLE EMP_EIT_EXT  
(
    EMPLOYEE_NUMBER   VARCHAR2(250), 
    Next_Academic_Rank  VARCHAR2(250), 
    Max_Academic_Rank  VARCHAR2(250), 
    Max_Score    VARCHAR2(250), 
    Academic_Rank   VARCHAR2(250), 
    Promotion_Rank   VARCHAR2(250), 
    ACADEMIC_RANK_START_DATE VARCHAR2(250), 
    ACADEMIC_RANK_END_DATE VARCHAR2(250), 
    Income_code    VARCHAR2(250), 
    Date_YYYY    VARCHAR2(250), 
    Date_MON     VARCHAR2(250), 
    Date_DD     VARCHAR2(250), 
    Amount     VARCHAR2(250), 
    Tax      VARCHAR2(250), 
    INCOME_START_DATE  VARCHAR2(250), 
    INCOME_END_DATE   VARCHAR2(250) 
); 

INSERT INTO EMP_EIT_EXT (EMPLOYEE_NUMBER,Next_Academic_Rank,Max_Academic_Rank,Max_Score,Academic_Rank,Promotion_Rank,ACADEMIC_RANK_START_DATE ,ACADEMIC_RANK_END_DATE,Income_code,Date_YYYY,Date_MON,Date_DD,Amount,Tax,INCOME_START_DATE,INCOME_END_DATE) 
VALUES('33333','Professor','Y','10.1','Ass.Professor','Y','01-JAN-2017','31-DEC-4712','P','2017','JAN','01','10000','Tax','01-JAN-2017','31-DEC-4712'); 
INSERT INTO EMP_EIT_EXT (EMPLOYEE_NUMBER,Next_Academic_Rank,Max_Academic_Rank,Max_Score,Academic_Rank,Promotion_Rank,ACADEMIC_RANK_START_DATE ,ACADEMIC_RANK_END_DATE,Income_code,Date_YYYY,Date_MON,Date_DD,Amount,Tax,INCOME_START_DATE,INCOME_END_DATE) 
VALUES('44444','Ass.Professor','N','9.7','Student','N','01-JAN-2017','31-DEC-4712','R','2017','JAN','17','50000','Non-Tax','01-JAN-2017','31-DEC-4712'); 

我知道這可以通過UNIONUNION ALL來實現,但我想如果可能的話使用UNPIVOT。

+0

所以一個問題是,規則從何而來? UNPIVOT查詢將如何知道INFO CAT「下一個學術排名」屬於額外信息「學術排名」,但「Income_code」屬於「外部收入預測」?它如何知道「外部收入預測::日期」需要三個INFORMATION * n *列,但「學術排名:有效開始日期」只有一個? – APC

+0

@APC,這是我有同樣的問題。沒有這些規則的參考表,它的所有用戶定義。有小費嗎?謝謝! –

+2

我唯一的提示是「不要這樣做」。如果您認爲將電子表格數據轉換爲[這個可怕的EAV變體](http://stackoverflow.com/a/876459/146325)很難,請等到您必須開始編寫查詢以返回數據。 – APC

回答

-1

當然。只需將SELECT聲明關閉,並將它們與UNION結合起來。你應該能夠弄清楚,解決這個問題。

+0

希望避免'聯合'。 –

+0

爲什麼,@ migsisip?他們是否被禁止進行這項練習? – AnoE

+0

這不是一個練習。它是我想要在我的程序中實現的樣本。 –