2017-03-17 132 views
0

我需要将列转换为Teradata中没有TD_UNPIVOT的行。我的表将列转换为行Teradata

ID |Code_1 | Code_2 | Code_3 | Code_4| 1 |1000 | 2000 | 3000 | 4000 | 1 |1000 | 2000 | 3000 | NULL | 1 |1000 | 2000 | NULL | NULL | 1 |1000 | NULL | NULL | NULL |

我需要Code_1,CODE_2,CODE_3,Code_4转换成2列:第一列将所有Code_n(不包括NULL),第二个将有代码的级别:

ID | Code_n | Level_of_Code 
1 | 4000 | 4 
1 | 3000 | 3 
1 | 2000 | 2 
1 | 1000 | 1 

这意味着,比我应该知道什么时候代码NULL(其中一级Code_1,CODE_2,CODE_3或Code_4,之后将其转换为列,最大级别的数字,我没有NULL)。

请帮帮我。 谢谢

+1

TD_UNPIVOT(http://www.info.teradata.com/HTMLPubs/DB_TTU_14_10/index.html#page/SQL_Reference/B035_1145_112A/Table_Operators.098.21.html)你在找什么。 – Andrew

+0

我不能使用td_unpivot,我没有权利激活它 – monika01

+0

呃,那么你需要使用'UNION'。 'SELECT ID,code_1,1作为level_of_code从 union select id,code_2 from ... order by 1,3 desc'。 – Andrew

回答

0

您可以通过使用多个select语句生成行并进行联合以将它们连接在一起。

Select id, code_1 as "code_n", 1 as "level_of_code" from your table 
Union all 
Select id, code_2,2 
Union all 
Select id, code_3,3 
Union all 
Select id, code_4,4; 
+0

谢谢你,它的工作:) – monika01