1

棒グラフにデータを入力する必要があります。私はすべてを整えています。データを収集するために使用されるSQLクエリがあります。

私が探しているのは、今月と過去11か月(合計12か月)のデータを提供するための最良の方法です。

このコードは、今日までの今月の情報を教えてくれます。これを変更して、過去11か月の情報も表示されるようにするにはどうすればよいですか?

この変更はクエリに対して行われますか、それともクエリを12回ループしますか?

protected void FillChart ()
{
    DateTime now = DateTime.Now;
    DateTime startDate = now.AddDays( 1 - now.Day );
    DateTime endDate = now;
    string query;

    query = "SELECT SUM(case when r.Type in ('Programming-Billable', 'Consulting-Billable') then r.Minutes_Spent";
    query += " end) AS 'Custom Programming and Consulting',";
    query += " SUM(case when r.Type in ('Data Maintenance', 'Tech Support-Billable', 'Training') then r.Minutes_Spent";
    query += " end) AS 'Tech. Support / Data Maint. / Training'";
    query += " FROM TK_Project p ";
    query += " INNER JOIN TK_Task t";
    query += " ON p.Project_ID = t.Project_ID ";
    query += " JOIN TK_Time_Record r";
    query += " ON t.ID = r.Task_ID";
    query += " WHERE p.Company = " + Session[ "Distid" ];
    query += " AND p.Name ='Technical Support' ";
    query += " AND r.Work_Date BETWEEN  '" + startDate + "'  AND  '" + endDate + "' ";
    query += " AND r.Type NOT LIKE '%non%'";


    DataTable data = GeneralFunctions.GetData( query );
}

クエリは現在、次の結果を返します。

Custom Programming and Consulting   Tech. Support / Data Maint. / Training
           90                                           105

編集:

SELECT SUM(case when r.Type in ('Programming-Billable', 'Consulting-Billable') then r.Minutes_Spent
           end) AS 'Custom Programming and Consulting',
       SUM(case when r.Type in ('Data Maintenance', 'Tech Support-Billable', 'Training') then r.Minutes_Spent
           end) AS 'Tech. Support / Data Maint. / Training'
FROM TK_Project p 
INNER JOIN TK_Task t
     ON p.Project_ID = t.Project_ID 
JOIN TK_Time_Record r
     ON t.ID = r.Task_ID
WHERE p.Company = 162 AND p.Name ='Technical Support' 
AND r.Work_Date BETWEEN  '04/01/2001'  AND  '04/30/2012' 
AND r.Type NOT LIKE '%non%'
4

3 に答える 3

2

開始日と終了日のみを変更する必要があります。

DateTime startDate = now.AddYears( -1 );
DateTime endDate = now;

ちなみに、両方の日時にパラメータを使用する方がおそらく良いでしょう。したがって、それらをGetDataメソッドに渡し、そこからSqlParametersを作成する必要があります。

編集:各月の合計が必要な場合は、月ごとにグループ化する必要があります。

GROUP BY DATEADD(month, DATEDIFF(month, 0, Work_Date),0)

とにかく今までのすべてのレコードを取得したい場合は、終了日を省略できます。

SELECT SUM(case when r.Type in ('Programming-Billable', 'Consulting-Billable') then r.Minutes_Spent
           end) AS 'Custom Programming and Consulting'
     , SUM(case when r.Type in ('Data Maintenance', 'Tech Support-Billable', 'Training') then r.Minutes_Spent
           end) AS 'Tech. Support / Data Maint. / Training'
     , DATEADD(month, DATEDIFF(month, 0, Work_Date),0) AS Month
FROM TK_Project p 
INNER JOIN TK_Task t
     ON p.Project_ID = t.Project_ID 
JOIN TK_Time_Record r
     ON t.ID = r.Task_ID
WHERE p.Company = 162 AND p.Name ='Technical Support' 
AND r.Work_Date BETWEEN  @startDate  AND  GetDate()
AND r.Type NOT LIKE '%non%'
GROUP BY DATEADD(month, DATEDIFF(month, 0, Work_Date),0)
Order By Month

@startDateをパラメーターとして追加したことに注意してください。

于 2012-05-09T17:09:24.217 に答える
1

要件を正しく理解していれば、Work_Dateの月でグループ化できます

Group by datepart(month, r.Work_Date) 
于 2012-05-09T17:23:20.450 に答える
0

質問がわからないかもしれませんが、のパラメータとして開始日と終了日を作成する必要があるようですFillChart()

于 2012-05-09T17:07:58.977 に答える