将列中月份或年份的所有日期转置到行

问题描述 投票:0回答:1

我正在尝试在下面的示例表中旋转日期(一个月到一年)

日期 品牌 价值
2024-04-01 星期一 abc 100
2024-04-02 星期二 abc 200
2024-04-03 周三 abc 300
2024-04-04 星期四 abc 800
2024-04-01 星期一 xyz 400
2024-04-02 星期二 xyz 200
2024-04-03 周三 xyz 500
2024-04-04 星期四 xyz 800

并且希望将“DATE”列转置为行,并且相应的值 DATE 值是一个月(2024-04-01 到 2024-04-30),并且根据年份和预期结果而变化,如下所示 预期结果:

日期 2024-04-01 2024-04-02 2024-04-03 2024-04-04
品牌 星期一 星期二 周三 星期四
abc 100 200 300 800
xyz 400 200 500 800

我尝试使用 SQL 进行数据透视和系列生成日期函数,但该函数在使用 SQL 的 Hana BTP 数据库中不起作用。请帮助我使用本机 SQL 查询来实现预期目的。

sql hana
1个回答
0
投票

HANA 不支持 PIVOT 功能。

您可以编写此类查询

SELECT 
BRAND,
Max(case when "DATE" = '2024-04-01' then VALUE end) as "2024-04-01",
Max(case when "DATE" = '2024-04-02' then VALUE end) as  "2024-04-02",
Max(case when "DATE" = '2024-04-03' then VALUE end) as  "2024-04-03",
Max(case when "DATE" = '2024-04-04' then VALUE end) as "2024-04-04"
.
.
.
.
from YourTable
group by BRAND;

但您也可以像这样动态生成此查询,

这是一个例子,

DO BEGIN
    DECLARE v_sql NVARCHAR(5000);
    DECLARE v_columns NVARCHAR(5000);

    -- Step 1: Generate pivot column names dynamically
    SELECT STRING_AGG('"DATE" = ''' || "DATE" || ''' THEN VALUE END AS "' || "DATE" || '"', ', ')
    INTO v_columns
    FROM (SELECT DISTINCT "DATE" FROM YourTable WHERE "DATE" BETWEEN '2024-04-01' AND '2024-04-30');

    -- Step 2: Construct the final SQL query
    v_sql := 'SELECT BRAND, ' || v_columns || ' FROM YourTable GROUP BY BRAND';

    -- Step 3: Execute the dynamically generated SQL
    EXECUTE IMMEDIATE v_sql;
END;
© www.soinside.com 2019 - 2024. All rights reserved.