我需要在excel中执行此操作:4列的日期已过一周(今天是19-07-2018,所以第一列将是12-07-2018)。来自Sql的报表是通过ODBC连接的,当它打开时,列标题应使用当前日期作为参考日期考虑该范围。
我无法找到要插入此日期的代码。如果我尝试使用Excel,则报告需要2分钟才能刷新工作表上的数据。因此,我唯一的想法是在SQL中复制报表并进行查看。请问您有一个不同于声明变量并执行它的解决方案吗?非常感谢 (在使用Sql 2012中) 干杯
答案 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;