在SQL中最后十个月的活动 [英] PIVOTING FOR LAST TEN MONTHS IN SQL

查看:56
本文介绍了在SQL中最后十个月的活动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

ProdCode	ProdDesc	PRODUCTSALEDATE	QTYY
MSDECR10	FOOD	           7/30/2010	5
MSDSTR10	ICE	           7/31/2010	6
MGS50B10	HOCKEY	            8/1/2010	8
MSDSTR10	FOOTBALL            8/2/2010	2
MSDRDB12	BED	            8/3/2010	1
MGS50U13	BALL	            8/4/2010	2
MSDDLR12	BULB	            8/5/2010	2
MSDRDB12	NEEDLE	            8/6/2010	3
MSDRDB12	KNIFE	            8/7/2010	4
MSDECR10	FORK	            8/8/2010	5
MSDECR12	KITE	            8/9/2010	6







我希望产品销售显示为专栏



如果用户写信日期2014-03-01

那么数据最近几个月会显示



LIKE这个




I WANT THAT PRODUCT SALE SHOW AS COLUMN

IF USER WRITE DATE 2014-03-01
THEN DATA WILL BE SHOW FOR LAST TEN MONTHS

LIKE THIS

ProdCode	ProdDesc	7/30/2010	7/31/2010	8/1/2010
MSDECR10	FOOD	           6	           1	           6
MSDSTR10	ICE	           0	           0	           0
MGS50B10	HOCKEY	           6	           0	           6
MSDSTR10	FOOTBALL	   3	           0	           3
MSDRDB12	BED	           0	           0	           0
MGS50U13	BALL	           0	           0	           0





但记住我不需要固定日期作为库尔恩



用户输入日期

和列将持续最后十个月



BUT REMEMBER I DONT NEED FIX DATE AS A COULMN

USER INPUT DATE
AND COLUMN WILL BE MAKE FOR LAST TEN MONTHS

推荐答案

首先,我建议使用存储过程 [ ^ ]:

First of all, i'd suggest to use stored procedure[^]:
CREATE PROCEDURE GetLast10Months
    @initialdate DATETIME
AS
BEGIN
     --declare local variables
    DECLARE @tenmonthsearlier DATETIME
    DECLARE @cols NVARCHAR(1000)
    DECLARE @dt VARCHAR(2000)
    DECLARE @pt VARCHAR(MAX)

    SET @tenmonthsearlier = DATEADD(MM, -10, @initialdate)

    --get unique dates
    SET @cols = STUFF((SELECT DISTINCT '],[' + PRODUCTSALEDATE
                       FROM TableName
                       WHERE PRODUCTSALEDATE BETWEEN @tenmonthsearlier AND @initialdate
                       ORDER BY '],[' + PRODUCTSALEDATE
                       FOR XML PATH('')), 1, 2, '') + ']'

    --define source table
    SET @dt = 'SELECT ProdCode, ProdDesc, PRODUCTSALEDATE, QTYY ' +
              'FROM TableName ' +
              'WHERE PRODUCTSALEDATE BETWEEN ''' + @tenmonthsearlier + ''' AND ''' + @initialdate + ''''

    --define pivot table
    SET @pt = 'SELECT ProdCode, ProdDesc, ' + @cols + ' '
              'FROM (' + @dt + ') AS DT ' +
              'PIVOT (MAX(QTYY) FOR PRODUCTSALEDATE IN (' + @cols + ')) AS PT'

    EXEC(@pt)
END





注意:以上代码未经过测试!



有关动态旋转的更多信息,请参阅:

http://www.mssqltips.com/sqlservertip/2783/script-to-create- dynamic-pivot-queries-in-sql-server / [ ^ ]

https://www.simple-talk.com/blogs/2007/09/14/pivots-with-dynamic- columns-in-sql-server-2005 / [ ^ ]

DATEADD [ ^ ]



Note: Above code wasn't tested!

For further information about dynamic pivoting, please see:
http://www.mssqltips.com/sqlservertip/2783/script-to-create-dynamic-pivot-queries-in-sql-server/[^]
https://www.simple-talk.com/blogs/2007/09/14/pivots-with-dynamic-columns-in-sql-server-2005/[^]
DATEADD[^]


这篇关于在SQL中最后十个月的活动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆