簡體   English   中英

雅典娜:將列轉換為不同的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM