Sql server 如何在SQL或SSRS标题中动态更新字段名
您好,我有一个这样的记录集:Sql server 如何在SQL或SSRS标题中动态更新字段名,sql-server,reporting-services,ssrs-2008-r2,Sql Server,Reporting Services,Ssrs 2008 R2,您好,我有一个这样的记录集: 2015-07-08 2015-05-08 Title Description A California 11 3 B Florida 2 4 现在,在上面的日期字段中,我需要动态更改它们的名称,如 如果我们有2015-07-08本周的its,那么我需要“本周加载”作为字段名而不是日期,如果是
2015-07-08 2015-05-08
Title Description
A California 11 3
B Florida 2 4
现在,在上面的日期字段中,我需要动态更改它们的名称,如
如果我们有2015-07-08本周的its,那么我需要“本周加载”作为字段名而不是日期,如果是2015-06-08,那么它是一个月前的,所以我需要“上个月加载”,如果是2015-02-08,那么我需要它作为“最后一个季度”。我怎样才能做到这一点
请在此方面提供帮助,谢谢
像这样的东西怎么样(使用动态查询更改列名)
这不是逐字逐句的,但应该给你一个例子
CREATE TABLE #TMP
(
TITLE VARCHAR(MAX)
, DESCR VARCHAR(MAX)
, [2015-07-09] INT
, [2015-05-09] INT
)
DECLARE @QUERY VARCHAR(MAX)
SET @QUERY = ' SELECT TITLE, DESCR, [2015-07-09] '
IF '2015-07-09 00:00:00.000' = (SELECT CONVERT(DATETIME, CONVERT(VARCHAR, GETDATE(), 101)))
SET @QUERY = @QUERY + ' AS [THIS WEEK] FROM #TMP'
EXECUTE (@QUERY)
DROP TABLE #TMP
注:如果您喜欢此解决方案,请单击它旁边的勾号。谢谢。动态标题不太容易实现。。。你可以 1.尝试使用动态sql 2.尝试用PIVOT找到解决方案 这取决于可能有多少不同的名称(只有“本周”、“上个月”和“上个季度”)?在这种情况下,您可以在case-WHEN中创建此名称作为选择的一部分,然后将其标题用作透视接收器 我很快会尝试添加一点示例 给你:
DECLARE @dates TABLE(d DATE,SomeValue INT);
INSERT INTO @dates
VALUES({ts'2015-07-08 00:00:00'},2)
,({ts'2015-07-07 00:00:00'},3)
,({ts'2015-07-01 00:00:00'},4)
,({ts'2015-06-02 00:00:00'},5)
,({ts'2015-05-27 00:00:00'},6)
,({ts'2015-03-17 00:00:00'},6)
,({ts'2015-01-07 00:00:00'},6)
,({ts'2014-05-27 00:00:00'},6)
,({ts'2014-05-27 00:00:00'},6);
WITH Today AS
(SELECT GETDATE() AS dat)
,dateBorders AS
(
SELECT CAST(dat-DATEPART(WEEKDAY,dat) + 1 AS DATE) AS ThisMonday --please check this as it differs in cultures!
,CAST(CAST(YEAR(dat) AS VARCHAR(4)) + REPLACE(STR(MONTH(dat),2),' ','0') + '01' AS DATE) AS ThisMonthBegin
,CASE WHEN MONTH(dat) IN(3,6,9,12) THEN 2
WHEN MONTH(dat) IN(4,7,10,1) THEN 3
WHEN MONTH(dat) IN(5,8,12,2) THEN 4 END AS MonthsToPrevQuarter
FROM Today
)
,dateBorders2 AS
(
SELECT *
,CAST(CAST(YEAR(ThisMonthBegin) AS VARCHAR(4)) + REPLACE(STR(MONTH(ThisMonthBegin) - MonthsToPrevQuarter,2),' ','0') + '01' AS DATE) AS LastQuarterBegin
FROM dateBorders
)
SELECT p.*
FROM
(
SELECT SomeValue
,CASE WHEN d>=ThisMonday THEN 'This week'
WHEN d>=ThisMonthBegin THEN 'This month'
WHEN d>=LastQuarterBegin THEN 'Last quarter'
ELSE 'older' END AS pivotMark
FROM dateBorders2,@dates
) AS tbl
PIVOT
(
SUM(SomeValue) FOR PivotMark IN([This week],[This month],[Last quarter],[older])
) AS p
注意:在接近年终休息时,会有更多的人在这一年里摆弄
如果你喜欢这个,请标记和/或投票,谢谢 当然这会有帮助,我也在尝试,因为我们只寻找最新的记录,其余的都是上一个记录。