SQL视图:具有动态日期的列标题

时间:2018-07-19 14:47:21

标签: sql sql-server excel

我需要在excel中执行此操作:4列的日期已过一周(今天是19-07-2018,所以第一列将是12-07-2018)。来自Sql的报表是通过ODBC连接的,当它打开时,列标题应使用当前日期作为参考日期考虑该范围。

enter image description here

我无法找到要插入此日期的代码。如果我尝试使用Excel,则报告需要2分钟才能刷新工作表上的数据。因此,我唯一的想法是在SQL中复制报表并进行查看。请问您有一个不同于声明变量并执行它的解决方案吗?非常感谢 (在使用Sql 2012中) 干杯

1 个答案:

答案 0 :(得分:0)

您可以在数据中即时创建一个假想列,该列将用作“周分组”列。它包含“一周的第一天”。您从SQL Server中选择数据作为“属性,WeekGroup,值”,然后在Excel中将此数据PIVOT(Excel确实非常擅长透视数据,因此您不需要透视SQL-传递原始数据并在那里透视)。在透视“属性”中是“行”字段,在“星期”中则是列字段,数据是值(如果未指定计算,则可能需要SUM为默认值)。

Here is a sample in SQLFiddle for the data and Query

编辑:仅在考虑SQLFiddle链接可能会丢失的情况下,将查询粘贴到此处:

WITH dates (d)
AS (SELECT TOP (7 * 4)
           DATEADD(d, -7 + ROW_NUMBER() OVER (ORDER BY t1.object_id), CAST(GETDATE() AS DATE))
    FROM sys.objects t1,
         sys.objects t2),
     mondays
AS (SELECT d
    FROM dates
    WHERE DATENAME(WEEKDAY, d) = 'Monday')
SELECT t.attribute,
       m.d AS [week],
       t.value
FROM myTable t
    INNER JOIN mondays m
        ON t.dt >= m.d
           AND t.dt < DATEADD(d, 7, m.d)
ORDER BY t.attribute,
         d,
         dt;