【问题标题】:Pivot table in teradata sqlteradata sql中的数据透视表
【发布时间】:2018-12-18 15:36:35
【问题描述】:

我有这样的数据:

ID      Result
1       value1
2       value1
2       value2
3       value1
4       value1
4       value2
4       value3

如何在 teradata SQL 中像 Excel 中一样完成数据透视表。

ID Value1                    Value2                    ...  
1  count of Value1 for ID 1  count of Value2 for ID 1  ...
2  count of Value1 for ID 2  count of Value2 for ID 1  ...
3  ...                       ...                       ...

假设有大量的 ID 和不同数量的值。

【问题讨论】:

    标签: sql pivot pivot-table teradata


    【解决方案1】:
    SELECT sum(case when Result='Value1' then ID end) "Value1"
         , sum(case when Result='Value2' then ID end) "Value2"
    FROM your_table
    GROUP BY null;
    

    恐怕这里不能添加太多上下文,除了这是可以在 TD 到 v15.x 之前实现枢轴的方式

    【讨论】:

    • 能否请您为您的答案添加更多上下文。仅代码或仅链接的答案很难理解。如果您可以在帖子中添加更多信息,这将对提问者和未来的读者都有帮助。
    【解决方案2】:

    所以我找到了答案,我想和你分享 首先,您需要重新计算数据以了解 id||Value 的计数

    CREATE TABLE myTable_count as (
    SELECT ID, Result, count(1) as countOfResult
    FROM myTable 
    group by  ID, Result
    ) WITH DATA 
    

    然后你可以做一个pivot,但你必须知道结果的名称

     SELECT ID,
     sum(CASE WHEN  Result='Value1' then countOfResult else NULL END) Value1,
     sum(CASE WHEN  Result='Value2' then countOfResult else NULL END) Value2
     FROM myTable_count
     GROUP BY ID;
    

    如果它帮助你给它投票。

    【讨论】:

      【解决方案3】:
      SELECT 
        id, 
        count(
          CASE WHEN result1 = 'value1' THEN id END
        ) AS value1, 
        COUNT(
          CASE WHEN result1 = 'value2' THEN id END
        ) AS value2, 
        COUNT(
          CASE WHEN result1 = 'value3' THEN id END
        ) as value3 
      FROM 
        pivot_tb1 
      group by 
        1;
      

      【讨论】:

      • 请尝试详细说明您的答案。仅代码的答案不被视为高质量的答案,即使它们可能是正确的。解释你在做什么,以便 OP 能够遵循你的想法
      猜你喜欢
      • 2014-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多