SQL: 基于列的重复行
SQL: Duplicate rows based on columns
我有一个 table 看起来像这样:
Name | Math | English | Arts
----------------------------------------
Brad | 87 | 65 | 90
Julie | 91 | 88 | 92
我想得到:
Name | Grade
--------------
Brad | 87
Brad | 65
Brad | 90
Julie | 91
Julie | 88
Julie | 92
使用 SQL/Hive 最简单的方法是什么?
类似这样。
select name,math as Grade from your_table
union all
select name,English as Grade from your_table
union all
select name,Arts as Grade from your_table
select
t.name,
CASE rows.col_name
WHEN 'Math' THEN t.Math
WHEN 'English' THEN t.**math**
WHEN 'Arts' THEN t.Arts
end as Grade
from the_table t,
(select 'Math' as col_name
union all
select 'English' as col_name
union all
select 'Arts' as col_name) rows
您可以使用 unpivot
:
SELECT X.Name, X.Grade
FROM your_table s
UNPIVOT
(
Grade
FOR Subject in (Maths, English, Arts)
) X;
如果要在结果中包含主题,请将 X.Subject
添加到 select 语句中。
我有一个 table 看起来像这样:
Name | Math | English | Arts
----------------------------------------
Brad | 87 | 65 | 90
Julie | 91 | 88 | 92
我想得到:
Name | Grade
--------------
Brad | 87
Brad | 65
Brad | 90
Julie | 91
Julie | 88
Julie | 92
使用 SQL/Hive 最简单的方法是什么?
类似这样。
select name,math as Grade from your_table
union all
select name,English as Grade from your_table
union all
select name,Arts as Grade from your_table
select
t.name,
CASE rows.col_name
WHEN 'Math' THEN t.Math
WHEN 'English' THEN t.**math**
WHEN 'Arts' THEN t.Arts
end as Grade
from the_table t,
(select 'Math' as col_name
union all
select 'English' as col_name
union all
select 'Arts' as col_name) rows
您可以使用 unpivot
:
SELECT X.Name, X.Grade
FROM your_table s
UNPIVOT
(
Grade
FOR Subject in (Maths, English, Arts)
) X;
如果要在结果中包含主题,请将 X.Subject
添加到 select 语句中。