【问题标题】:Please help me in Teradata query, I need to add the same logic in my existing code请在 Teradata 查询中帮助我,我需要在现有代码中添加相同的逻辑
【发布时间】:2021-12-23 15:12:25
【问题描述】:

我的桌子是这样的

CUSTOMER   DATE    speed  TV   NOVOUCHER
12      11/11/2021   1     0     0
12      11/11/2021   0     0     1
12      10/11/2021   0     1     0
12      10/11/2021   0     0     1

我怎样才能做到这一点-

PACKAGE     CUSTOMER    DATE        COUNT
SPEED ONLY     12      11/11/2021    1
TV ONLY        12      11/11/2021    0
SPEED+TV       12      11/11/2021    0
NO VOUCHER     12      11/11/2021    1
SPEED ONLY     12      10/11/2021    0
TV ONLY        12      10/11/2021    1
SPEED+TV       12      10/11/2021    0
NO VOUCHER     12      10/11/2021    1

【问题讨论】:

  • 所以您想要每个 customer, date 组合的 4 个副本,一个包含四个 package 值中的每一个以及一个包含 0 或 1 的列?如果是这样,您可以编写 4 个查询 - 每个包一个,使用适当的 CASE 生成 0/1 列 - 和 UNION ALL 结果。

标签: teradata


【解决方案1】:

This guide 展示了几种转置数据的方法。但是,由于 CUSTOMER 和 DATE 没有一行(即每个客户的每个日期都有两行数据),这使得它稍微复杂一些。下面是一个使用 UNPIVOT Teradata 函数的示例 sn-p 代码,它将为您提供所需的输出。

SELECT * FROM TD_UNPIVOT(
ON
(SELECT
CUSTOMER,
"DATE", 
Sum(SPEED) AS SPEED,
Sum(TV) AS TV,
Sum(NOVOUCHER) AS NOVOUCHER,
CASE
    WHEN Sum(SPEED) = 1 AND Sum(TV) = 1 THEN 1
    ELSE 0
    END AS "SPEED+TV"
FROM table_name
GROUP BY CUSTOMER, "DATE"
)
USING
VALUE_COLUMNS('Package')
UNPIVOT_COLUMN('Count')
COLUMN_LIST('SPEED', 'TV', 'NOVOUCHER','SPEED+TV')
COLUMN_ALIAS_LIST('SPEED', 'TV', 'NOVOUCHER','SPEED+TV')
)X;

值得注意的是,UNPVIOT 功能仅在某些版本的 Teradata 中可用(我认为是 16 版本)

【讨论】:

    猜你喜欢
    • 2014-07-08
    • 1970-01-01
    • 2015-03-16
    • 2011-05-29
    • 2013-12-14
    • 2013-12-22
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    相关资源
    最近更新 更多