在SQL Server中显示几行作为列

时间:2016-09-06 06:54:42

标签: sql-server sql-server-2008

我不确定如何为此编写查询。在做一些谷歌的东西,我发现解决方案是使用一个数据透视表,但不知道如何将它应用于我的表。

我有3个表TableDateTableMembersSales

我需要加入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]

注意:第一部分是原始结果,图像的第二部分是我的结果。我还需要在约会年20132014允许的情况下设置一个条件。

IMAGE

1 个答案:

答案 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)

输出如下

enter image description here