我正在尝试在下面的示例表中旋转日期(一个月到一年)
日期 | 周 | 品牌 | 价值 |
---|---|---|---|
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 查询来实现预期目的。
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;