ユーザーが月をクリックしてから、このストアドプロシージャが実行されます。予約された時間の合計と、フィルタされたグループを確認します。フィルタは複数の日付範囲に基づいていますか?
| Job Group | Month Booked | Time (hrs) |
Cleaning Jan 7
私は、次のSQLを持っている:
SELECT
tsks.grouping_ref, ttg.description AS grouping_desc,
SUM(ts.booked_time) AS booked_time_total,
DATENAME(MONTH, ts.start_dtm) + ' ' + DATENAME(YEAR, ts.start_dtm) AS month_name,
@month_ref AS month_ref
FROM
timesheets ts
JOIN
timesheet_categories cat ON ts.timesheet_cat_ref = cat.timesheet_cat_ref
JOIN
timesheet_tasks tsks ON ts.task_ref = tsks.task_ref
JOIN
timesheet_task_groupings ttg ON tsks.grouping_ref = ttg.grouping_ref
WHERE
ts.status IN(1, 2) --Booked and approved
AND cat.is_leave_category = 0 --Ignore leave
AND DATEPART(YEAR, ts.start_dtm) = @Year
AND DATEPART(MONTH, ts.start_dtm) = @Month
GROUP BY
tsks.grouping_ref, ttg.description,
DATENAME(MONTH, ts.start_dtm),
DATENAME(YEAR, ts.start_dtm)
ORDER BY
grouping_desc
は、私は、複数の日付範囲に基づいてフィルタリングします。
私はこれを追加する方法について考えた:
AND ((ts.start_dtm BETWEEN '2011-12-28' AND '2012-01-01')
OR (ts.start_dtm BETWEEN '2012-01-02' AND '2012-01-29'))
しかし、その後、ユーザが、それはORステートメントをさせて頂きますよう、それはまだすべてのレコードを表示しますクリックする何月も問題ないだろう実現。私は必要なもの
はmonth_refに基づいている何か、例えば次のとおりです。
CASE WHEN @month_ref = 81201 THEN
AND (ts.start_dtm BETWEEN '2011-12-28' AND '2012-01-01')
END
しかし、case文は、単にWHERE句の後に行く必要があります。
私は2012年に約12会計年度があります。ユーザーが3月をクリックすると、正しいフィルタが起動するようにケースステートメントとして追加する必要があります。データベースts.start_dtm
で
は次のようになります。私の最初のポストのための十分な情報だった
2011-04-01 00:00:00.000
希望?
私はこのケースの記述を書き留めています。それをどこに置くか、今何時間も試しています。
あなたは:)
感謝を二つの日付を取得する代わりに、この参照テーブルに参加したりすることができます? –
この例では、テンポラリ・テーブルを使用して、クエリがyesに対して実行する日付を格納しています。挿入文が動作するようにするために永続的な整数テーブルを作成する必要があります(まだ持っていないと仮定します) – u07ch
私のストアドプロシージャは管理スタジオで動作するようですが、ウェブサイトはDATE BETWEENのように見えません。なぜどんなアイデア? –