ケース式の中でdatediff関数を移動し、そのケース式全体を集計関数内に入れる必要があります。
SELECT
AVG(CASE WHEN T.[Reported Milestones] LIKE '02 Request Assigned' THEN
DATEDIFF(DAY,P.[ProjectCreatedDate],T.[TaskActualFinishDate])
END)
AS averageassignmentage
NOTEタスク「期間」を扱う「終了日」は、典型的には、「その日の終わり」を参照して、しかし、どのようなDBに記録されていることは、「その日の始まり」に相当されます。したがって、開始日の開始から終了日の始めまでの日数を数えている日付計算に1を追加することはほぼ確実です。
SELECT
AVG(CASE WHEN [Reported Milestones] LIKE '02 Request Assigned' THEN
DATEDIFF(DAY,[ProjectCreatedDate],[TaskActualFinishDate])+1
END)
AS averageassignmentage
, COUNT(CASE WHEN [Reported Milestones] LIKE '02 Request Assigned' THEN
TaskActualFinishDate
END)
AS sample_size
from table1
Results:SQL Fiddle
CREATE TABLE Table1
([Reported Milestones] varchar(19), [ProjectCreatedDate] datetime, [TaskActualFinishDate] datetime)
;
INSERT INTO Table1
([Reported Milestones], [ProjectCreatedDate], [TaskActualFinishDate])
VALUES
('02 Request Assigned', '2017-10-01 00:00:00', '2017-10-10 00:00:00'),
('02 Request Assigned', '2017-10-01 00:00:00', '2017-10-10 00:00:00'),
('02 Request Assigned', '2017-10-01 00:00:00', '2017-10-10 00:00:00'),
('xxx', '2017-10-01 00:00:00', NULL),
('xxx', '2017-10-01 00:00:00', NULL)
;
クエリ1で
テスト/例
| averageassignmentage | sample_size |
|----------------------|-------------|
| 10 | 3 |
'case文の後end'を使用してください。 –
残りのクエリといくつかのサンプルデータを投稿し、それが機能しない方法を説明してください。エラーメッセージが表示されたり、正しくない結果が表示されたりしますか?どのDBMSを使用していますか? – Dai
ヒント:複雑な 'SELECT'節がある場合、中間結果を論理的に分離して読みやすくするためにサブクエリを使用する価値があります。残念ながら、SQLでは 'SELECT '内に反復ステップと一時変数が存在しません。 – Dai