2012-03-21 11 views
0

でコード計算した値を登録しよI太陽に月を生成し、一連の一時テーブルを作成します次のストアドプロシージャを持っている「週間」(開始時刻と終了週):INNERは、SELECT文

USE [test_staff] 
GO 

/****** Object: StoredProcedure [dbo].[sp_timesheets_all_staff_by_week_by_job_grouping_by_site] Script Date: 03/21/2012 09:04:49 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 



CREATE PROCEDURE [dbo].[sp_timesheets_all_staff_by_week_by_job_grouping_by_site] 
    (
    @grouping_ref int, 
    @week_ref int 
    ) 
AS 

CREATE TABLE #WeeklyList 
(
    Start_Week date, 
    End_Week date, 
    week_ref int 
    --month_name date 
) 


DECLARE @REPORT_DATE DATETIME, @WEEK_BEGINING VARCHAR(10) 
SELECT @REPORT_DATE = '2011-01-19T00:00:00' 
--SELECT @REPORT_DATE = GETDATE() -- should grab the date now. 
SELECT @WEEK_BEGINING = 'MONDAY' 
IF @WEEK_BEGINING = 'MONDAY' 
SET DATEFIRST 1 
ELSE IF @WEEK_BEGINING = 'TUESDAY' 
SET DATEFIRST 2 
ELSE IF @WEEK_BEGINING = 'WEDNESDAY' 
SET DATEFIRST 3 
ELSE IF @WEEK_BEGINING = 'THURSDAY' 
SET DATEFIRST 4 
ELSE IF @WEEK_BEGINING = 'FRIDAY' 
SET DATEFIRST 5 
ELSE IF @WEEK_BEGINING = 'SATURDAY' 
SET DATEFIRST 6 
ELSE IF @WEEK_BEGINING = 'SUNDAY' 
SET DATEFIRST 7 
DECLARE @WEEK_START_DATE DATETIME, @WEEK_END_DATE DATETIME 
--GET THE WEEK START DATE 
SELECT @WEEK_START_DATE = @REPORT_DATE - (DATEPART(DW, @REPORT_DATE) - 1) 
--GET THE WEEK END DATE 
SELECT @WEEK_END_DATE = @REPORT_DATE + (7 - DATEPART(DW, @REPORT_DATE)) 
PRINT 'Week Start: ' + CONVERT(VARCHAR, @WEEK_START_DATE) 
PRINT 'Week End: ' + CONVERT(VARCHAR, @WEEK_END_DATE) 

DECLARE @Interval int = datediff(WEEK,getdate(),@WEEK_START_DATE)+1 

--SELECT [email protected]_START_DATE 
--, [email protected]_END_DATE 
--INTO #WeekList 

INSERT INTO #WeeklyList 

SELECT [email protected]_START_DATE, [email protected]_END_DATE 

WHILE @Interval <= 0 
    BEGIN 
    set @WEEK_START_DATE=DATEADD(WEEK,1,@WEEK_START_DATE) 
    set @WEEK_END_DATE=DATEADD(WEEK,1,@WEEK_END_DATE) 
    INSERT INTO #WeeklyList values (@WEEK_START_DATE,@WEEK_END_DATE) 
    SET @Interval += 1; 
END 

SELECT 
CONVERT(VARCHAR(11), Start_Week, 106) AS 'month_name', 
CONVERT(VARCHAR(11), End_Week, 106) AS 'End', 
DATEDIFF(DAY, 0, Start_Week)/7 AS week_ref -- create the unique week reference number 
--'VIEW' AS month_name 

FROM #WeeklyList 

DECLARE @YearString char(3) = CONVERT(char(3), SUBSTRING(CONVERT(char(5), @week_ref), 1, 3)) 
    DECLARE @MonthString char(2) = CONVERT(char(2), SUBSTRING(CONVERT(char(5), @week_ref), 4, 2)) 

    --Convert: 
    DECLARE @Year int = CONVERT(int, @YearString) + 1200 
    DECLARE @Month int = CONVERT(int, @MonthString) 

**--THIS FILTERS THE REPORT**  
    SELECT  ts.staff_member_ref, sm.common_name, sm.department_name, DATENAME(MONTH, ts.start_dtm) + ' ' + DATENAME(YEAR, ts.start_dtm) AS month_name, 
          ts.timesheet_cat_ref, cat.desc_long AS timesheet_cat_desc, grps.grouping_ref, grps.description AS grouping_desc, ts.task_ref, tsks.task_code, 
          tsks.description AS task_desc, ts.site_ref, sits.description AS site_desc, ts.site_ref AS Expr1, 
          CASE WHEN ts .status = 0 THEN 'Pending' WHEN ts .status = 1 THEN 'Booked' WHEN ts .status = 2 THEN 'Approved' ELSE 'Invalid Status' END AS site_status, 
          ts.booked_time AS booked_time_sum, 

    start_dtm, CONVERT(varchar(20), start_dtm, 108) + ' ' + CONVERT(varchar(20), start_dtm, 103) AS start_dtm_text, booked_time, 
    end_dtm, CONVERT(varchar(20), end_dtm, 108) + ' ' + CONVERT(varchar(20), end_dtm, 103) AS end_dtm_text 


    FROM  timesheets AS ts INNER JOIN 
          timesheet_categories AS cat ON ts.timesheet_cat_ref = cat.timesheet_cat_ref INNER JOIN 
          timesheet_tasks AS tsks ON ts.task_ref = tsks.task_ref INNER JOIN 
          timesheet_task_groupings AS grps ON tsks.grouping_ref = grps.grouping_ref INNER JOIN 
          timesheet_sites AS sits ON ts.site_ref = sits.site_ref INNER JOIN 
          vw_staff_members AS sm ON ts.staff_member_ref = sm.staff_member_ref 



    WHERE  (ts.status IN (1, 2)) AND (cat.is_leave_category = 0) 


    GROUP BY ts.staff_member_ref, sm.common_name, sm.department_name, DATENAME(MONTH, ts.start_dtm), DATENAME(YEAR, ts.start_dtm), ts.timesheet_cat_ref, 
          cat.desc_long, grps.grouping_ref, grps.description, ts.status, ts.booked_time, ts.task_ref, tsks.task_code, tsks.description, ts.site_ref, sits.description, ts.start_dtm, 
          ts.end_dtm 
    ORDER BY sm.common_name, timesheet_cat_desc, tsks.task_code, site_desc 

    DROP TABLE #WeeklyList 

    GO 
0123:このセクションでは、私は、この選択コードとそれを組み合わせる必要がある week_ref

DATEDIFF(DAY, 0, Start_Week)/7 AS week_ref -- create the unique week reference number 

を作成しています

week_refをSELECTステートメントに渡したいのですが(コメント - このフィルターを参照)、問題はweek_refがコードで派生したものではないということです。

アイデア?

答えて

0

を解決するためのスタートです

望みはただ、INNERあなたはフィルタリングする必要がある日に、あなたのweeklylist一時テーブルにJOINを行います。

0

私は本当に問題を理解しているとは確信していませんが、投稿したコードに2つの問題があります。 #WeeklyListテンポラリテーブルに挿入した挿入物に、選択した値の1つの列が欠落しています。@week_ref

IIこれを変更すると、最終的なテーブルを選択します私は持っていない。これはあなたの問題

+0

ありがとう、WHERE(ts.status IN(1,2))AND(cat.is_leave_category = 0)AND week_ref = @ week_ref –

+0

問題は変数week_ref is notが認識されます –

+0

私は申し訳ありませんしかし、私はエラーを複製することはできません、私は "AND week_ref = @ week_ref"の部分を追加し、私はそのテーブルを持っていないので、私は "無効なオブジェクト名 'タイムシート'"のエラーを持って、実際のエラーメッセージを投稿できますか? – Cenas