2016-10-25 13 views
0

以下のSQLは、それぞれのビルドのビルド時間を返しますが、今はビルドの平均ビルド時間を与えたいと思います。 BuildStartTime & BuildFinishTimeは、DateTimeフィールドです。CASEを使用し、次にCASTを使用してCAST値を使用して平均を実行します。

SELECT 
Build_Quality.TeamProject, 
DATEPART(year, BuildStartTime) AS Year, 
DATENAME(month, BuildStartTime) AS Month, 
--Get the Build Time 
CASE When buildname LIKE 'CI-%' then CAST(BuildFinishTime-BuildStartTime AS time(0)) END AS [CI Build Time], 
CASE When buildname LIKE '%AutoMerge%' then CAST(BuildFinishTime-BuildStartTime AS time(0)) END AS [Auto Merge Build Time], 
CASE When buildname NOT LIKE '%AutoMerge%' AND buildname NOT LIKE 'CI-%' then CAST(BuildFinishTime-BuildStartTime AS time(0)) END AS [Various Other Build Time] 

FROM    
dbo.Build_Quality 
GROUP BY 
Build_Quality.TeamProject, 
DATEPART(year, BuildStartTime), 
DATENAME(month, BuildStartTime), 
DATEPART(month, BuildStartTime), 
BuildName, 
BuildStartTime, 
BuildFinishTime, 
Build_Quality.BuildStatus 

ORDER BY 
'Year', 
DATEPART(month, BuildStartTime) 
+0

このクエリは意味をなさない。この 'GROUP BY'節は何ですか?なぜそんなに多くの列? – sagi

+0

テーブル構造と参照用のデータを共有してください。 –

+0

なぜGROUP BYですか?私は集計関数を見ません。 – jarlh

答えて

0

平均して何をしたいですか?持続時間、継続時間、または何?しかし、私はこれがあなたにアイデアを与えると思う:

WITH CTE AS (

     SELECT 
      Build_Quality.TeamProject, 
      DATEDIFF(HOUR, BuildStartTime, BuildFinishTime) AS DurationHours 
     FROM    
      dbo.Build_Quality) 

SELECT 
     TeamProject 
     , AVG(DurationHours) 
FROM CTE 
GROUP BY TeamProject 
関連する問題