2016-04-29 5 views
-1

傾向と予測のためにスタッフが1時間単位で作業している期間を分析しようとしています。列を垂直方向に計算する

縦の列のすべての値を垂直方向に計算して人数を計算します。

これは限り値が0以上であるとして時間単位の形式でSQLで出力
(私は総括したい値を丸で囲まれている)
http://i.stack.imgur.com/dJbWi.png
http://i.stack.imgur.com/rM3YV.png

ですが、私はしたいですこれは1時間とヘッドカウントのため1とカウントします。

これは出力を生成するためのクエリの一部です。

SELECT 

--b.*, 
b.EMPLOYEENAME, 
B.DEPARTMENT, 

CONVERT(datetime, LEFT(b.SHIFTA_start,17),103) AS SHIFTA_start, 
CONVERT(datetime, LEFT(b.ShiftA_End,17),103) as ShiftA_End, 
b.StartTime_HOUR, 
b.StartTime_min, 
b.EndTime_HOUR, 
b.EndTime_min, 


CASE WHEN b.[0H_START] < b.[0H_END] THEN b.[0H_START] ELSE b.[0H_END] END AS [0], 
CASE WHEN b.[1H_START] < b.[1H_END] THEN b.[1H_START] ELSE b.[1H_END] END AS [1] 


from 
(
/*Step 2 - calculating minutes from starttime and endtime */ 

select a.*, 

/**Calculating the number of minutes worked from start_time MIN **/ 
CASE WHEN a.StartTime_HOUR = 0 and a.[0] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[0] END AS [0H_START], 
CASE WHEN a.StartTime_HOUR = 1 and a.[1] = 1 AND a.StartTime_min !=0 THEN cast(cast((60-a.StartTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[1] END AS [1H_START], 


/**Calculating the number of minutes worked from END_time MIN **/ 
CASE WHEN a.EndTime_HOUR = 0 and a.[0] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[0] END AS [0H_END], 
CASE WHEN a.EndTime_HOUR = 1 and a.[1] = 1 AND a.EndTime_min !=0 THEN cast(cast((a.EndTime_min) as decimal(10,2))/60 as decimal(10,2)) ELSE a.[1] END AS [1H_END] 
from 

(--Step 1: 
/*to determine 1 or 0 using the start and end hour 
If time falls in the respective hour = 1 
if time doesnt fall in the respective hours = 0*/ 
SELECT 

[EMPLOYEENAME], 
[DEPARTMENT], 
[SHIFTA_start], 
CASE WHEN [SHIFTA_START] !='' OR SHIFTA_START != NULL THEN CONVERT(datetime, LEFT([SHIFTA_START],17),103) ELSE NULL END AS SHIFTA_START_con, 
CASE WHEN [SHIFTA_START] !='' OR SHIFTA_START != NULL THEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) ELSE NULL END AS StartTime_HOUR, 
CASE WHEN [SHIFTA_START] !='' OR SHIFTA_START != NULL THEN DATEPART(mi,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) ELSE NULL END AS StartTime_min, 

[SHIFTA_end], 
CASE WHEN [SHIFTA_END] !='' OR SHIFTA_end != NULL THEN CONVERT(datetime, LEFT([SHIFTA_END],17),103) ELSE NULL END AS SHIFTA_END_con, 
CASE WHEN [SHIFTA_END] !='' OR SHIFTA_end != NULL THEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) ELSE NULL END AS EndTime_HOUR, 
CASE WHEN [SHIFTA_END] !='' OR SHIFTA_end != NULL THEN DATEPART(mi,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) ELSE NULL END AS EndTime_min, 


CASE WHEN [SHIFTA_START] !='' AND 0 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [0], 
CASE WHEN [SHIFTA_START] !='' AND 1 BETWEEN DATEPART(hh,CONVERT(datetime, LEFT([SHIFTA_START],17),103)) AND DATEPART (hh,CONVERT(datetime, LEFT([SHIFTA_end],17),103)) THEN 1 ELSE 0 END AS [1] 

from [DatabaseTable].[dbo].[ATTENDANCE] 

where ShiftA_Start != '' and ShiftA_End !='' and shiftA_start != shiftA_End 

)a 

)b 

お手数ですが、vありがとうございます!

+0

ポストテキストとしてではなく、画像などのサンプルデータ、あなたが試してみました何のクエリを提供しています。 –

+0

投稿データをテキストとしてどういう意味ですか?あなたはExcel形式での意味ですか? 私はすでにクエリを投稿していますので、見てください。 @StanislovasKalašnikovas – Vannessa

答えて

0

あなたは、この列のすべての値の数を計算したい場合はあなたが簡単に行くことができます:

SELECT COUNT(T.[22]) FROM Table AS T 
WHERE T.[22] > 0 
+0

各列の垂直方向に個別に計算したいと思います。 – Vannessa

関連する問題