【问题标题】:Split column in 3将列拆分为 3
【发布时间】:2011-09-21 12:33:39
【问题描述】:

注意:尝试了以下几个答案(它在 Teradata 中,所以有些答案到处都是语法错误)

我在这里撞到了一堵砖墙。 我想在不同的列中逐年比较

ID, Year, Revenue 
1, 2009, 10 
1, 2009, 20 
1, 2010, 20 
2, 2009, 5 
2, 2010, 50
2, 2010, 1

如何同时按 ID 和年份分开?

最后我希望它看起来像这样

ID, Year, Sum
1, 2009, 30
1, 2009, 20
...
2, 2010, 51

(为便于理解而进行了大量编辑)

【问题讨论】:

  • 你能扩展一下吗?我很难理解这个问题。
  • 您想要 ID 的 SUM 和 (ID,Year) 的 SUM 吗?

标签: sql select teradata


【解决方案1】:

根据您提供的详细信息,我能给您的最好的方法是将您的表分解为子查询:

select t1.yr - t2.yr from 
 (select yr 
   from the_table where yr = 2010) t1, 
 (select yr 
   from the_table where yr = 2010) t2

如果我们知道您使用的是哪种类型的数据库、您的表的实际结构是什么等,可以提供更多详细信息,但也许这会让您入门。

【讨论】:

    【解决方案2】:

    类似这样的:

    select id, t2009.year, t.2010.year, t2010.year-t.2009.year diff
    from
    ( select id, year
    from mytable
    where year = 2009
    ) t2009
    ,
    ( select id, year
    from mytable
    where year = 2010
    ) t2010
    

    【讨论】:

      【解决方案3】:

      您很可能需要自行加入

      SELECT [what you are comparing] FROM [table] t1
        [INNER/LEFT] JOIN [table] t2 ON t1.[someID] = t2.[someID]
      WHERE t1.year = 2009 AND t2.year = 2010
      

      在 someID 中不一定必须是 ID,甚至不一定是索引列,但它应该是您要在这些年中比较的列。

      例如带有列/字段的名为“产品”的表

      • 身份证
      • 产品名称
      • 价格
      • 年份

      你可以这样做:

      SELECT t1.ProductName, (t2.Price - t1.Price) As Price_change FROM Products t1
        INNER JOIN Products t2 ON t1.ProductName = t2.ProductName
      WHERE t1.year = 2009 AND t2.year = 2010
      

      如果 ProductName 是主键或索引列,这会更快。这也比使用比连接慢得多的嵌套选择(在索引上连接时)要快。

      【讨论】:

        【解决方案4】:

        根据你的数据和你想要的输出,我想你只是想要这个:

        select ID, Year, SUM(Revenue)
        from YourTable
        GROUP BY ID, Year
        

        更新

        现在,如果您的第一个数据样本已经是 SELECT 查询,您需要:

        select ID, Year, SUM(Revenue)
        from (SELECT...) YourSelect
        GROUP BY ID, Year
        

        【讨论】:

          【解决方案5】:

          这看起来很适合 ROLLUP 命令。它将为您提供分组列的自动总和:

          GROUP BY ROLLUP (ID,Year)
          

          More info here.

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-11-14
            • 2016-11-20
            • 2016-05-08
            • 1970-01-01
            • 1970-01-01
            • 2014-07-25
            • 2017-01-08
            • 1970-01-01
            相关资源
            最近更新 更多