Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 透视活动代码天数月份_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql server 透视活动代码天数月份

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

我正在尝试获取特定日期的活动代码,以显示特定员工一年中每个月的31天

如果员工在场,请病假、休假等。。。我希望这些活动代码根据下面的输出显示一年的活动日期范围

谢谢


首先,创建一个函数,给出特定范围的日期值

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