Sql server 透视活动代码天数月份
我正在尝试获取特定日期的活动代码,以显示特定员工一年中每个月的31天 如果员工在场,请病假、休假等。。。我希望这些活动代码根据下面的输出显示一年的活动日期范围 谢谢Sql server 透视活动代码天数月份,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我正在尝试获取特定日期的活动代码,以显示特定员工一年中每个月的31天 如果员工在场,请病假、休假等。。。我希望这些活动代码根据下面的输出显示一年的活动日期范围 谢谢 首先,创建一个函数,给出特定范围的日期值 CREATE FUNCTION [dbo].[GetAllDatesBetweenRange] ( @FromDate DATE ,@ToDate DATE ) RETURNS @Dates TABLE ( DateVal DATE ) AS BEGIN ;WITH
首先,创建一个函数,给出特定范围的日期值
CREATE FUNCTION [dbo].[GetAllDatesBetweenRange]
(
@FromDate DATE
,@ToDate DATE
)
RETURNS @Dates TABLE
(
DateVal DATE
)
AS
BEGIN
;WITH CTE
AS
(
SELECT @FromDate AS FromDate
UNION ALL
SELECT DATEADD(DD,1,FromDate)
FROM CTE
WHERE FromDate < @ToDate
)
INSERT INTO @Dates
SELECT FromDate FROM CTE
OPTION (MAXRECURSION 0)
RETURN;
END
GO
这可以通过旋转来实现。在这里,您可以在查询中输入员工id,以获取该特定员工的结果
--create table
create table staff_info
(
staffId int,
actDate datetime,
activityCode int
)
--insert values
insert into staff_info values
(2699, '01/02/2017', 101),
(2699, '05/14/2017', 303),
(2699, '08/06/2017', 101),
(1927, '10/25/2017', 105)
--actual solution
select * from
(
select staffId, day(actDate) as act_day,month(actDate) as actual_month,
activityCode
from staff_info
where staffId=2699 ----- enter the staff id here
) src
pivot
(
sum(activityCode)
for act_day in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],
[14],[15],
[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29],[30],
[31]
)
) p
结果:
请您将问题主体上的图片内容略过一遍好吗?您好,谢谢您的回复,我收到一条错误消息,但我不确定如何发布我的图片。我当前没有SQL Server的创建权限。我只能选择。我如何发布另一张图片?抱歉,这是我的第一篇帖子。请相应地更改表名和列名。。。不要直接运行查询…我创建表只是为了测试
--create table
create table staff_info
(
staffId int,
actDate datetime,
activityCode int
)
--insert values
insert into staff_info values
(2699, '01/02/2017', 101),
(2699, '05/14/2017', 303),
(2699, '08/06/2017', 101),
(1927, '10/25/2017', 105)
--actual solution
select * from
(
select staffId, day(actDate) as act_day,month(actDate) as actual_month,
activityCode
from staff_info
where staffId=2699 ----- enter the staff id here
) src
pivot
(
sum(activityCode)
for act_day in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],
[14],[15],
[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29],[30],
[31]
)
) p