[英]Athena: Convert column to different values
我想將一列轉換為另一個值,有點像擁有一張地圖。 我目前正在做類似的事情
SELECT col1,
col2,
CASE
data = 'data1' THEN 'd1'
WHEN data = 'data2' THEN 'd2' ELSE data
END AS converted_data
FROM some_table
這很好用,但我真的有很多其他的可能性,也許是 20 或更多。 未來它甚至可能達到數百個。
是否可以將地圖作為表格,並轉換該表格中的值? 我相信你可以使用JOIN
但這似乎很貴? 有沒有一種方法可以使用CASE
而無需編寫每條語句而僅基於該表中的值?
如果不編寫每個條件來完成您想要完成的事情,真的沒有辦法使用 case 語句。
如果您的最終目標是將列的值更改為其他內容的映射,並且可能會更改或者是大量項目; 為了便於維護,您可能希望使用另一個需要連接或使用子查詢的表。
這里有 2 個帶有測試數據的工作示例來展示它們是如何工作的:
左連接:
#CTEs with test data
with convert_data as (
select *
From (
values('data1', 'd1'),
('data2', 'd2')
) as convertdata (ddatavalue, datareplace)
),
some_table as(
select *
From (
values('1', '1', 'data1'),
('2', '2', 'data2'),
('3', '3', 'data3')
) as sametable (col1, col2, ddata)
)
#query showing how to do the join
select col1,
col2,
coalesce(datareplace, ddata) as converted_data
from some_table st
left join convert_data cd on cd.ddatavalue = st.ddata
子查詢:
#CTEs with test data
with convert_data as (
select *
From (
values('data1', 'd1'),
('data2', 'd2')
) as convertdata (ddatavalue, datareplace)
),
some_table as(
select *
From (
values('1', '1', 'data1'),
('2', '2', 'data2'),
('3', '3', 'data3')
) as sametable (col1, col2, ddata)
)
#query showing how to do the sub-query
select col1,
col2,
coalesce(
(
select cd.datareplace
from convert_data cd
where cd.ddatavalue = st.ddata
),
ddata
) as converted_data
from some_table st
哪一個會比另一個表現更好將取決於您的數據、結構和數據文件格式。 測試兩者,看看哪一個更適合你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.