【问题标题】:SQL Columns to rows with last 12 months of dataSQL 列到具有过去 12 个月数据的行
【发布时间】:2018-08-29 19:26:34
【问题描述】:

我有一个包含每月消费金额的 sql 表。我想通过 cust_no 将列转换为行,并仅显示过去 12 个月的消费情况。有很多年消费数据的客户。我希望数据在新的消费读数出现时刷新,随着时间的推移,最新的读数,然后是之前的读数,依此类推。最好的方法是什么?


cust_no cons read_dt
   1    1    2/28/2017 0:00
   1    2    3/31/2017 0:00
   1    2    5/1/2017 0:00
   1    2    6/1/2017 0:00
   1    2    6/30/2017 0:00
   1    2    7/31/2017 0:00
   1    2    8/29/2017 0:00
   1    3    9/29/2017 0:00
   1    2    10/31/2017 0:00
   1    2    12/1/2017 0:00
   1    2    1/2/2018 0:00
   1    3    2/1/2018 0:00
   1    2    3/2/2018 0:00
   2    1    12/21/2016 0:00
   2    0    1/20/2017 0:00
   2    0    2/21/2017 0:00
   2    1    3/24/2017 0:00
   2    1    4/24/2017 0:00
   2    2    5/25/2017 0:00
   2    2    6/26/2017 0:00
   2    1    7/25/2017 0:00
   2    1    8/24/2017 0:00
   2    2    9/25/2017 0:00
   2    2    10/26/2017 0:00
   2    2    11/27/2017 0:00
   2    1    12/26/2017 0:00
   2    2    1/26/2018 0:00
   2    2    2/26/2018 0:00

【问题讨论】:

  • PIVOT with MONTH()的可能重复
  • @dfundako,你不可能投反对票,因为到目前为止只有一个 DV,而且我知道它是我的。
  • 各位,SQL初学者不一定清楚这个操作叫做pivot
  • 如果您要将列转换为行,则查找 UNPIVOT
  • 您的最佳指标是什么?你的工作最少?表达 TSQL 时字符最少?最小的内存占用?并行执行最有效?

标签: sql sql-server tsql pivot


【解决方案1】:

试试这个:

   select * from    (select * from #temp
   where read_dt between dateadd(yy,-1, read_dt )and getdate() )a 
   pivot (max (read_dt) for
   cons in  ([1],[2],[3]))b

【讨论】:

  • 谢谢!那种让我到那里。不过,我仍然看到同一客户的多行。此外,我必须将 dateadd(yy,-1, read_dt ) 更改为 dateadd(yy,-1, getdate() ) 以获取去年的一些消费数据。我不知道为什么我没有得到所有这些。 select * from (select * from complus90.dbo.cubconsump where read_dt between dateadd(mm,-12, getdate() )and getdate() )a pivot (max (read_dt) for cons in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]))b
  • 你能给我一个你看到的重复行的例子吗?
  • 现在看不到重复的行,但看到的是日期值而不是消费值。
  • 好的,所以只需像这样切换数据透视字段(在我放置'date1','date2'等的表格中填写日期):select * from (select * from complus90.dbo.cubconsump where在 dateadd(mm,-12, getdate() ) 和 getdate() 之间的 read_dt 轴(max (cons) for read_dt in ([date1], [date2],...))b
  • 日期值似乎进入了 cons = 列标题的单元格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 2013-09-16
  • 1970-01-01
相关资源
最近更新 更多