我不确定如何为此编写查询。在做一些谷歌的东西,我发现解决方案是使用一个数据透视表,但不知道如何将它应用于我的表。
我有3个表TableDate
,TableMembers
和Sales
我需要加入3个表并获得以下结果。
我的原始查询看起来像
SELECT [Member No], [Full Date],[Member State], SUM([Net Sales]) as Netsales
FROM (([TableMembers] inner join [TableDate]
on [TableMembers].DateKey = [TableDate].DateKey)
inner join [Sales]
on [TableMembers].RID = [Sales].RID)
where [Full Date] between '2014-01-01' and '2015-05-05'
group by [Member No], [Full Date],[Member State]
order by [Full Date]
注意:第一部分是原始结果,图像的第二部分是我的结果。我还需要在约会年2013
,2014
允许的情况下设置一个条件。
答案 0 :(得分:0)
对于示例,您可以使用以下SQL Pivot query
select
*
from
(
select
member, date, state, net
from tblSource
) SourceTable
PIVOT
(
SUM(net)
FOR date
IN (
[29-02-2013],[30-05-14]
)
) PivotTable
但当然我们必须扩大所有日期的查询 这需要将上述SQL数据透视查询构建为动态SQL数据透视查询 如果您参考引用的SQL教程,我们可以按如下方式构建它
DECLARE @Dates VARCHAR(MAX)
SELECT @Dates =
COALESCE(
@Dates + ',[' + cast([date] as varchar) + ']',
'[' + cast([date] as varchar)+ ']'
)
FROM tblSource
DECLARE @PivotSQL NVARCHAR(MAX)
SET @PivotSQL = N'
select
*
from
(
select
member, date, state, net
from tblSource
) SourceTable
PIVOT
(
SUM(net)
FOR date
IN (
' + @Dates + '
)
) AS PivotTable
'
EXECUTE(@PivotSQL)
输出如下