具有动态日期的SQL Pivot

具有动态日期的SQL Pivot,sql,Sql,我试图建立一个报告,总结过去4周内每周的总销售额。例如: |-Item-|-1Week-|-2Weeks-|-3Weeks-|-4Weeks-| |-Pens-|---100-|---1000-|----800-|------0-| |Pencil|-----0-|----600-|---1500-|---2000-| 下面的查询返回的正是我对前一周的预期,但是,在将查询更改为对前4周的每个查询分别求和时,我遇到了障碍 SELECT itemmast.itemcode, item

我试图建立一个报告,总结过去4周内每周的总销售额。例如:

|-Item-|-1Week-|-2Weeks-|-3Weeks-|-4Weeks-|
|-Pens-|---100-|---1000-|----800-|------0-|
|Pencil|-----0-|----600-|---1500-|---2000-|
下面的查询返回的正是我对前一周的预期,但是,在将查询更改为对前4周的每个查询分别求和时,我遇到了障碍

SELECT        itemmast.itemcode, itemmast.description, itemmast.packsize, SUM(sodetail.order_quantity) AS qtyweek1
FROM            dbo.soheader AS soheader INNER JOIN
                         dbo.sodetail AS sodetail ON soheader.invoice_number = sodetail.invoice_number INNER JOIN
                         dbo.itemmast AS itemmast ON sodetail.itemcode = itemmast.itemcode
WHERE        (soheader.so_issue_datetime > DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 0)) AND (soheader.so_issue_datetime < DATEADD(wk, DATEDIFF(wk, 0, GETDATE()), 0))
GROUP BY itemmast.itemcode, itemmast.description, itemmast.packsize, sodetail.order_uomid
选择itemmast.itemcode、itemmast.description、itemmast.packsize、SUM(sodetail.order\u数量)作为QTY周1
从dbo.soheader作为soheader内部联接
dbo.sodetail作为soheader.invoice\u编号=sodetail.invoice\u编号内部联接上的sodetail
dbo.itemmast作为sodetail.itemcode上的itemmast=itemmast.itemcode
其中(soheader.so_issue_datetime>DATEADD(wk,DATEDIFF(wk,6,GETDATE()),0))和(soheader.so_issue_datetime

我掌握了透视表的基本知识(因为我对SQL非常陌生,所以从未使用过透视表),但我不确定如何将动态日期范围转换为列并实现我的目标。如果有任何帮助,我将不胜感激。

我能够解决我的问题,方法是在每周所需的select语句中添加以下示例,并简单地调整DATEDIFF参数

isnull(SUM(CASE WHEN (soheader.so_issue_datetime > DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 0)) AND (soheader.so_issue_datetime < DATEADD(wk, DATEDIFF(wk, 0, GETDATE()), 0)) THEN sodetail.order_quantity END),0) AS "1 Week"
isnull(求和(soheader.so_issue_datetime>DATEADD(wk,DATEDIFF(wk,6,GETDATE()),0))和(soheader.so_issue_datetime