2016-09-09 2 views
1

현재 주 데이터 (항상 변경됨)와 전년도의 데이터를 하나의 SQL 테이블로 만들려고합니다. 나는 여러 테이블을 가지고 있지만 하나의 테이블에 모든 것을 만드는 방법을 모르겠다. 여기에 지금까지 무엇을 가지고 :현재 주 및 그 날짜가 1 년인 데이터 표

------- 올해 -------

DECLARE 
@CURRENTDATE DATE, 
@BEGINDATE DATE 

SET @CURRENTDATE = CONVERT(DATE,GETDATE()) ---// TODAY'S DATE //--- 
SET @BEGINDATE = DATEADD(DAY, -7, GETDATE()) ---// A WEEK BEFORE TODAY'S DATE //--- 

SELECT SALES.*, RECRUITS.Recruits 
FROM 
(
    SELECT 
    CONVERT(VARCHAR(10), A.[ORDER DATE], 101) AS 'DAY' 
    , 'Sales Revenue Current Year' = FORMAT(SUM(A.[GRAND TOTAL]) ,'C', 'EN-US') 
    , 'Comm. Sales Volume Current Year' = FORMAT(sum(a. [QUALIFYING VOLUME]), 'C', 'EN-US') 
    FROM TABLE1 a 
    WHERE CONVERT(VARCHAR(10), A.[ORDER DATE], 101) >= @BEGINDATE AND CONVERT(VARCHAR(10), A.[ORDER DATE], 101) < @CURRENTDATE 
    GROUP BY CONVERT(VARCHAR(10), A.[ORDER DATE], 101) 
) SALES, 
(
    SELECT 
    CONVERT(VARCHAR(10),a.[start date],101) AS 'DAY' 
    ,count(b.[id number]) as Recruits 
    from TABLE2 a 
    left join 
    TABLE3 b 
    on a.enroller = b. [id number] 
    WHERE CONVERT(VARCHAR(10), A.[START DATE], 101) >= @BEGINDATE AND CONVERT(VARCHAR(10), A.[START DATE], 101) < @CURRENTDATE 
    group by a.[start date] 
) RECRUITS 
WHERE SALES.DAY = RECRUITS.DAY 

내가 이전 연도의 동일한 스크립트가 있습니다. 날짜를 -366 및 -373 일로 설정하는 것을 제외하고는 동일합니다. 어떤 도움이라도 좋을 것입니다!

+1

MySQL 또는 SQL Server? – Santi

+0

코드가 tsql이므로 mysql 태그를 제거했습니다. – JNevill

+0

왜 새 테이블 대신보기가 필요합니까? 이렇게하면 항상 지난 주에 끝날 수 있습니다. –

답변

0

아래와 같이 "OR"가있는 여러 날짜를 사용할 수 있지만 더 나은 해결책은 "WeekOfYear", "WeekOfMonth", "QuarterOfYear"와 같은 일일 날짜 목록을 사용하는 것입니다. ","IsHoliday "등. 그런 다음 해당 테이블에 대한 날짜를 입력하고"where t1.WeekOfYear = t2.WeekOfYear "를 쿼리 할 수 ​​있습니다.

DECLARE 
    @EndDate DATE   = GETDATE() ---// TODAY'S DATE //--- 
    , @StartDate DATE  = DATEADD(DAY, -7, GETDATE()) ---// A WEEK BEFORE TODAY'S DATE //--- 
    , @LYStartDate DATE  = DATEADD(YEAR, -1, GETDATE()) ---// A YEAR BEFORE TODAY'S DATE //--- 
    , @LYEndDate DATE  = DATEADD(DAY, -7, DATEADD(YEAR, -1, GETDATE())) ---// A YEAR AND A WEEK BEFORE TODAY'S DATE //--- 

SELECT SALES.*, RECRUITS.Recruits 
FROM 
(
    SELECT 
     'DAY' = CONVERT(VARCHAR(10), A.[ORDER DATE], 101) 
     , 'Sales Revenue Current Year' = FORMAT(SUM(A.[GRAND TOTAL]) ,'C', 'EN-US') 
     , 'Comm. Sales Volume Current Year' = FORMAT(sum(a. [QUALIFYING VOLUME]), 'C', 'EN-US') 
    FROM TABLE1 a 
    WHERE (
     (CAST(A.[ORDER DATE] AS DATE) >= @StartDate AND CAST(A.[ORDER DATE] AS DATE) <= @EndDate) 
     OR 
     (CAST(A.[ORDER DATE] AS DATE) >= @LYStartDate AND CAST(A.[ORDER DATE] AS DATE) <= @lyEndDate) 
     ) 
    GROUP BY CAST(A.[ORDER DATE] AS DATE) 
) SALES, 
(
    SELECT 
     'DAY' = CAST(a.[start date] AS DATE) 
     , Recruits = COUNT(b.[id number]) 
    FROM TABLE2 a 
     LEFT JOIN TABLE3 b 
      ON a.enroller = b. [id number] 
    WHERE (
     (CAST(A.[START DATE] AS DATE) >= @StartDate AND CAST(A.[ORDER DATE] AS DATE) <= @EndDate) 
     OR 
     (CAST(A.[START DATE] AS DATE) >= @lyStartDate AND CAST(A.[ORDER DATE] AS DATE) <= @LYEndDate) 
    GROUP BY CAST(a.[start date] AS DATE) 
) RECRUITS 
WHERE SALES.DAY = RECRUITS.DAY 
관련 문제