如果你正在寻找一个动态透视,请考虑以下
创建一些示例数据
--Drop Table #YourTable
Create Table #YourTable (CustomerID int,StartDate date,EndDate date,SalesPersonID int,ServicePalnID int,DivisionID int)
Insert Into #YourTable values
(1,'2017-01-01','2017-02-06',1,5,1),
(2,'2017-01-01',null ,1,5,1),
(3,'2017-02-04',null ,1,5,1),
(4,'2017-02-05','2017-04-05',1,5,2),
(5,'2017-06-06',null ,2,6,2),
(6,'2017-03-26','2017-04-03',2,6,2),
(7,'2017-04-01',null ,2,6,3),
(8,'2017-04-04',null ,3,6,3)
动态查询
Declare @Date1 date = '2017-01-01'
Declare @Date2 date = GetDate()
Declare @SQL varchar(max) = Stuff((Select ',' + QuoteName(format(D,'MMM yyyy'))
From (
Select Top (DateDiff(MONTH,@Date1,@Date2)+1)
D=DateAdd(MONTH,-1+Row_Number() Over (Order By Number),@Date1)
From master..spt_values
) A
For XML Path('')),1,1,'')
Select @SQL = '
Select [YAxis] as [Division],' + @SQL + '
From (
Select YAxis = concat(''Division '',A.DivisionID)
,XAxis = format(D,''MMM yyyy'')
,Value = 1
From #YourTable A
Join (
Select Top (DateDiff(MONTH,'''+concat('',@Date1)+''','''+concat('',@Date2)+''')+1)
D=DateAdd(MONTH,-1+Row_Number() Over (Order By Number),'''+concat('',@Date1)+''')
From master..spt_values
) B
on D between DateFromParts(Year(StartDate),month(StartDate),1) and EOMonth(IsNull(EndDate,GetDate()))
) A
Pivot (sum(Value) For [XAxis] in (' + @SQL + ')) p'
Exec(@SQL);
返回
首先,你需要你想显示的月份。你可以为此使用一个值子句。然后加入表格,以便获得适用于一个月的记录。然后汇总/每个部门和每月的数据。 (通常,数据透视是在应用程序中完成的,而不是在SQL中完成的:SQL获取数据,该应用程序关心演示文稿。) –