【发布时间】:2013-10-21 21:29:29
【问题描述】:
我在表中有以下数据。
状态 P_Name 产品 Apr-2013 May-2013 Jun-2013 July-2013 Aug-2013 Sep-2013 Oct-2013 Nov-2013 Dec-2013 Jan-2014 Feb-2014 Mar-2014 ==================================================== ==================================================== ==================================================== ========= s1 p1 pro1 1500 4587 5245 6541 9683 45878 65464 4444 4411 21452 223322 232322 s1 p1 pro2 1500 4587 5245 6541 9683 45878 65464 4444 4411 21452 223322 232322现在前三列是静态的,但值是动态的,其余的 column_names 和值是动态的。有了这个有一个变量
Declare @MONTHS INT
SET @MONTHS = 1--3/6/12 can be 1/3/6/12 as monthly/quater/half-year/fullyear
现在根据@MONTHS 的值,我必须将值添加到第一/第一到第三/第一到六/第一到十二列并仅显示该列。
如果
SET @MONTHS = 1
那么上面的数据就是结果。但是
SET @MONTHS = 3
那么想要的结果如下:
状态 P_Name 产品 Jun-2013 Sep-2013 Dec-2013 Mar-2014 ==================================================== ====================== s1 p1 pro1 11332 62102 74319 477096 s1 p1 pro2 11332 62102 74319 477096此处仅显示第 3 个月列,并添加了 2013 年 4 月、2013 年 5 月和 2013 年 6 月的列值(在 2013 年 6 月列中),我希望在第 6 列和第 12 列中也显示 6 和 12。 月列数和行数是动态的。 月份列数只能是 1/3/6/12 的倍数。 在这方面需要帮助。 谢谢。
编辑: 上面的表格数据是在 PIVOT 的帮助下使用另一个表格得出的。是否可以在没有循环的 PIVOT 之前/使用 ..? 以下是 PIVOT 之前的数据。
state p_name 产品数量monthnames ================================================= s1 p1 pro1 1500 2013 年 4 月 s1 p1 pro1 4587 2013 年 5 月 s1 p1 pro1 5245 2013 年 6 月 等等................ ………………………………………………………………………………【问题讨论】:
-
向我们展示你已经拥有的东西。
-
对此一无所知...:(抱歉一段时间后编辑了重要信息....!!
-
这里的网站规则之一:“要求代码的问题必须证明对正在解决的问题有最低限度的了解。包括尝试的解决方案、它们为什么不起作用以及预期的结果。 " 所以至少向我们展示你对静态部分的了解。那么什么时候可以把它改成动态的。
标签: sql-server