如何在SQLServer2005中获取日期作为标头
我正在尝试将日期作为标题,根据当前日期的不同而变化。下面是我在SQLServer2005中尝试执行的一个示例。 选择c.[ar cust edi sef type], 当 s、 [ar销售日期]如DATEADDdd、0、DATEDIFFdd、0、GETDATE-7和s[ar销售单据类型]如“发票” 然后s.【应收销售余额到期】 否则0将以getdate结束如何在SQLServer2005中获取日期作为标头,sql,sql-server-2005,Sql,Sql Server 2005,我正在尝试将日期作为标题,根据当前日期的不同而变化。下面是我在SQLServer2005中尝试执行的一个示例。 选择c.[ar cust edi sef type], 当 s、 [ar销售日期]如DATEADDdd、0、DATEDIFFdd、0、GETDATE-7和s[ar销售单据类型]如“发票” 然后s.【应收销售余额到期】 否则0将以getdate结束 getdate不起作用。有没有办法将日期作为标题返回?列标题不能是动态的。您可以从以下事实中看出这一点:通常不将它们指定为字符串,而是将它们
getdate不起作用。有没有办法将日期作为标题返回?列标题不能是动态的。您可以从以下事实中看出这一点:通常不将它们指定为字符串,而是将它们指定为标识符
SELECT 1 as TestColumn
而不是
SELECT 1 as 'TestColumn'
您可以通过exec执行查询的形式来做您想做的事情
这就是日期标题的意思吗
您可以在不使用pivot的情况下执行此操作,但mssql大多使用pivot。此代码将日期列为列标题。使用动态枢轴来获得结果。首先,我创建一个带有日期和随机文本的表来测试解决方案。替换表格并相应地更改代码 如果您能提供您的模式和数据,那么答案将更加适用和实用
DECLARE @StartDate DATE = '20110901'
, @EndDate DATE = '20111001'
SELECT DATEADD(DAY, nbr - 1, @StartDate) AS [Date]
,'test' AS [Value]
into #temp_Dates
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY c.object_id ) AS Nbr
FROM sys.columns c
) nbrs
WHERE nbr - 1 <= DATEDIFF(DAY, @StartDate, @EndDate)
--------------------------------------------------------------------------------------
-----------Dynamic PIVOT section to make the date as a column header------------------
DECLARE @SQL AS VARCHAR(MAX)
, @cols_ AS vARCHAR(MAX)
, @Table_Name VARCHAR(20)
SET @Table_Name = '#temp_Dates'
--Making the column list dynamically
SELECT @cols_ = STUFF((SELECT DISTINCT ', '+QUOTENAME( [T2].[Date])
FROM #temp_Dates [T2]
FOR XML PATH('')), 1, 1, '')
SET @SQL = ' SELECT
pivoted.*
FROM
(
SELECT *
FROM '+@Table_Name+'
) AS [p]
PIVOT
(
MIN([P].[Value])
FOR [P].[Date] IN (' + @cols_ + ')
) AS pivoted;
';
PRINT( @SQL)
EXEC (@SQL)
DROP TABLE #temp_Dates
结果:执行此操作的常用方法是添加一个要查询的日期字段,然后在应用程序或报表逻辑中处理布局。考虑这一点:如果页眉是动态的,您打算如何在报表或应用程序中引用它?您也必须在那里动态地确定它,并希望您的逻辑匹配。
DECLARE @StartDate DATE = '20110901'
, @EndDate DATE = '20111001'
SELECT DATEADD(DAY, nbr - 1, @StartDate) AS [Date]
,'test' AS [Value]
into #temp_Dates
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY c.object_id ) AS Nbr
FROM sys.columns c
) nbrs
WHERE nbr - 1 <= DATEDIFF(DAY, @StartDate, @EndDate)
--------------------------------------------------------------------------------------
-----------Dynamic PIVOT section to make the date as a column header------------------
DECLARE @SQL AS VARCHAR(MAX)
, @cols_ AS vARCHAR(MAX)
, @Table_Name VARCHAR(20)
SET @Table_Name = '#temp_Dates'
--Making the column list dynamically
SELECT @cols_ = STUFF((SELECT DISTINCT ', '+QUOTENAME( [T2].[Date])
FROM #temp_Dates [T2]
FOR XML PATH('')), 1, 1, '')
SET @SQL = ' SELECT
pivoted.*
FROM
(
SELECT *
FROM '+@Table_Name+'
) AS [p]
PIVOT
(
MIN([P].[Value])
FOR [P].[Date] IN (' + @cols_ + ')
) AS pivoted;
';
PRINT( @SQL)
EXEC (@SQL)
DROP TABLE #temp_Dates