特定の職員のために、特定の日のアクティビティコードを取得して、その月の31日を表示しようとしています。ピボットアクティビティコード日月
スタッフがいた場合、病気、休暇など...私はこれらのアクティビティコードを1年間act_date範囲の下の出力に基づいて表示します。
ありがとうございます!まずPivot Activity Code Days Months
特定の職員のために、特定の日のアクティビティコードを取得して、その月の31日を表示しようとしています。ピボットアクティビティコード日月
スタッフがいた場合、病気、休暇など...私はこれらのアクティビティコードを1年間act_date範囲の下の出力に基づいて表示します。
ありがとうございます!まずPivot Activity Code Days Months
、特定範囲
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
ピボットする以下ダイナミッククエリの日付値を与える関数を作成
これはピボット操作で実現できます。ここでは、特定のスタッフの結果を取得するためにクエリにスタッフ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を使用してアクセス権を作成していません。私は選択することしかできません。どうすれば別の画像を投稿できますか?申し訳ありませんが、これは私の最初の投稿です。 –
それに応じてテーブル名とカラム名を変更してください...直接クエリを実行しないでください...私はテスト目的のためだけにテーブルを作成しました –
あなたが質問の身体上の画像に何を過ぎていただけますか? –