2017-11-02 9 views
2

特定の職員のために、特定の日のアクティビティコードを取得して、その月の31日を表示しようとしています。ピボットアクティビティコード日月

スタッフがいた場合、病気、休暇など...私はこれらのアクティビティコードを1年間act_date範囲の下の出力に基づいて表示します。

ありがとうございます!まずPivot Activity Code Days Months

+0

あなたが質問の身体上の画像に何を過ぎていただけますか? –

答えて

0

enter image description here

、特定範囲

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 

使用して、特定の日付範囲

DECLARE @Sql NVARCHAR(MAX); 
DECLARE @DateVal NVARCHAR(MAX); 

SELECT @DateVal = STUFF((SELECT ',['+CAST(DateVal AS NVARCHAR(50))+']' 
FROM [dbo].[GetAllDatesBetweenRange]('2017-01-01','2017-12-31') 
FOR XML PATH('')),1,1,'') 

SET @Sql = ' 
;WITH CTE 
AS 
(
SELECT Res1.STAFF_ID 
     ,Res2.DateVal 
     ,Res1.ACTIVITY_CODE 
FROM [dbo].[GetAllDatesBetweenRange](''''2017-01-01'''',''''2017-12-31'''') Res1 
LEFT JOIN TableA A ON A.ACT_DATE = Res1.DateVal 
) 
SELECT STAFF_ID 
     ,* 
FROM CTE 
PIVOT 
(
    MAX(ACTIVITY_CODE) 
    FOR DateVal IN ('[email protected]+')'+' 
)' 

EXEC SP_EXECUTESQL @Sql 
ピボットする以下ダイナミッククエリの日付値を与える関数を作成
0

これはピボット操作で実現できます。ここでは、特定のスタッフの結果を取得するためにクエリにスタッフ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 

結果:

enter image description here

enter image description here

+0

返信いただきありがとうございます。エラーメッセージが表示されていますが、画像の投稿方法がわかりません。現時点では、現在SQL Serverを使用してアクセス権を作成していません。私は選択することしかできません。どうすれば別の画像を投稿できますか?申し訳ありませんが、これは私の最初の投稿です。 –

+0

それに応じてテーブル名とカラム名を変更してください...直接クエリを実行しないでください...私はテスト目的のためだけにテーブルを作成しました –