2017-04-13 3 views
0

開始から現在の日付までの列のさまざまな項目の出現を合計する必要があります(将来のデータがあります) 私の表は次のようになりますこれと私は、「今週はまでは」Everytingフィルタ使用しない場合はSQL開始日から現在の日付まで複数の項目を列に合計する

|Task Name|Finish Date| Type|Planned| 
|Equate |1/2/17  | App |1 
|TSquare |2/7/17  | App |2 
|Smart |3/1/17  | Data |1 

では、各タイプ(Applicaitonによって合計列と最後の列を持つようにしたい

 Select sum (case when 
    Tt.[TaskPercentCompleted] < 100 and Tt.[Task_Significance] like 'Application' 
    Or Tt.[TaskPercentCompleted] < 100 and Tt.[Task_Significance] like 'Data' 
    then 1 else 0 end) as [Planned] 
From [Some table] 

私は素晴らしいですこの出力を得る - しかし、それは今週までではなく、すべてを数えます。(そして来週 - つまり、週など) enter image description here 私は再び

Select sum(case when 
    [Task_Significance] like 'Application' 
    Or 
    [Task_Significance] like 'data' 
    then 1 else 0 end) over (order by [taskfinishdate] rows unbounded preceding) as Planned 
From [Some table] 
where 
[taskfinishdate] <= DATEADD(DAY, 8-DATEPART(DW, GETDATE()), Convert(date,getdate())) 

enter image description here

(だから私は日付のフィルタを取得)同じステートメントにこれを追加するときしかし、私は、現在の日付までタイプによって合計する必要がありますそれらの合計だけではありません。私はこれを正しく理解している場合、あなたはSUMの代わりにWHERE句、GROUP BYとし、COUNTを使用することによって、これを達成することができます - あなただけのApplicationまたはDataのいずれかのTaskSignificanceを持つ行をカウントしようとしているように思え

+0

ここで 'taskfinishdate <キャスト(getdate()として日付)'を使用してください。 – scsimon

+0

タイプ別に 'sum'が必要です。'タイプ別にグループ化する ' – TriV

答えて

0

SELECT 
    COUNT(1) AS Planned 
FROM SomeTable 
WHERE TaskFinishDate < GETUTCDATE() 
    AND TaskSignificance IN('Application', 'Data') 
GROUP BY TaskSignificance; 
日付フィルタリングは WHERE句によって処理され

、及びCOUNTは、このように窓関数すなわちover (order by ...この場合に必要とされていない、行の順序を気にしません。正確なニーズに合わせて日付フィルタリングを調整することができます。

+0

ありがとう!素晴らしいアプローチ!だから私はこのフォーラムが好きなのです - 本当の専門家 – Bob

関連する問題