动态显示每个客户每月和每年的销售总额

时间:2019-08-27 15:07:30

标签: sql sql-server dynamic-pivot

不确定从今天起最近12/13个月如何通过动态月份年份列细分每个客户的订单总金额

手动对月份进行硬编码并定义年份可以很好地工作,但不能动态显示出来

`Declare @SQLQuery as NVARCHAR(MAX)
Declare @PivotColumns as NVARCHAR(Max)

select @PivotColumns= COALESCE(@PivotColumns + ',','') + QUOTENAME(DATENAME(MONTH, a.INVOICEDATE))
from dbo.TableA a,dbo.TableB b, dbo.TableC c
where a.INVOICEID=b.INVOICENUMBER and b.INVOICECUSTAC=c.CACCOUNT


set @SQLQUERY= N'select b.INVOICECUSTOMERACCOUNTNUMBER, c.ORGANIZATIONNAME, SUM(a.LINEAMOUNTTOTAL) [LineAmount]
from dbo.TableA a,dbo.TableB b, dbo.TableC c
where a.INVOICEID=b.INVOICENUMBER and b.INVOICECUSTAC=c.CACCOUNT 
group by b.INVOICECUSTAC,c.ORGANIZATIONNAME,a.INVOICEDATE) as x
PIVOT (SUM(LineAmount) FOR Month IN (' + @PivotColumns +')) AS P'

exec sp_executesql @SQLQUERY`

查询继续运行,不会显示任何结果。

预期结果应该类似于:

帐户7月18日至8月18日...... 8月19日
ABC001 50000
DEF002 70000

1 个答案:

答案 0 :(得分:0)

我认为您需要用以下查询替换参数@PivotColumns的设置部分。

select @PivotColumns = 
        STRING_AGG (
                    (QUOTENAME ( (isnull( (DATENAME(MONTH, a.INVOICEDATE )), '')  ) ) ), 
                    ','
                  )
from    dbo.TableA a
            join dbo.TableB b on a.INVOICEID=b.INVOICENUMBER
            join dbo.TableC c on b.INVOICECUSTAC=c.CACCOUNT

Print @PivotColumns;
相关问题