2014-02-24 3 views
1

:값 비교는 5 개 컬럼의 테이블이 2008

COL1, COL2, COL3, col4는, MONTHNAME

뭔가 같은 :

col1 | col2 | col3 | col4 | monthName 
---------------------------------------- 
4  | 5 | 55 | 8 | January 
4  | 4 | 33 | 6 | February 

COL1과 COL2 합해야합니다 지난 달의 col4와 동일합니다. 그래서 나는

select * from table1 where col1+col2=col4 where monthName='February' 

처럼 비교할 수 있지만, 모든 행을 비교합니다 알의 내가 그것을 내가 올바른 방법으로이 작업을 수행하는 방법

select * 
from table1 
where col1+col2 = (select col4 from table1 where monthName='January') 
where monthName='February' 

같은 달에 특정 뭔가 싶어?

음, 월간 보고서에 대한 내용입니다.

아마도 내 주요 문제는 지난 달 (예 : 1 월)부터 col4를 얻는 것입니다.

좀 더 명확하게 설명하기 위해 노력하고 있어요 :

  1. COL1합니다 (MONTHNAME 열에입니다) 현재 월의COL2를 확인하고 합을한다.
  2. 지난 달에서 col4 세포 값을 받으십시오. 이 경우 monthName 란의 2 월입니다.
  3. 은 (MONTHNAME에서 지난 달) col4COL1 + COL2 (현재 월)를 비교.
  4. 첫 번째 예에서 행 번호 2는 참일 수 있습니다. 이는 4 분의 4 = 8이 col4 값 (8) 1 월과 일치하기 때문입니다. 이번 달의 col1과 col2 합계가 지난 달의 col4 데이터와 일치하면 사용자는 좋습니다.

나는 아주 쉽게 COL1과 COL2 얻을 수 있습니다 :
선택 합 (COL1 + COL2)를 currentTotal로 표 어디에서 MONTHNAME = '2월'

하지만 난 지난 달 저장소에서 col4 값을 얻는 방법 그러면 어딘가에 현재의 총계와 비교할 수 있을까요? 매월 15 개의 행이 삽입되며 지난 달과 비교됩니다.

이번에 제가 좀 더 잘 설명했는지 확실하지 않습니다!

+1

디자인을 다시 생각해 봐야합니다. 'monthName varchar' 대신에'first_of_month date'를 고려해야합니다. – gvee

+0

왜 SUM (col1 + col2-col4) GROUP BY 월을 계산하지 않습니까? 그런 식으로 무효 값이 0이 아니면 – jean

+0

테이블 1과 예상 결과에 더 많은 데이터 행을 추가 할 수 있습니까? 나는 너의 설명을 이해하지 못한다 –

답변

0

당신은

select * 
from table1 t1 
join 
(
select monthName, SUM(col1+col2-col4) as isZero 
group by monthName 
) as t2 
on t2.monthName = t1.monthName 
where t2.isZero != 0 
1

달의 이름은 반신 반의 아래 의사 코드 같은 것을 시도 할 수 있지만, 정보를 우리가 가지고있는 트릭해야 다음은 무엇을

-- Creating a table variable as a sample for your query. 
DECLARE @T TABLE (col1 INT, col2 INT, col3 INT, col4 INT, monthName VARCHAR(25)) 
INSERT INTO @T VALUES (4,4,55,9,'January'),(5,4,3,6,'February'), (3,3,3,6,'March') 

-- Update the references to your actual table in this query. 
;WITH CTE AS (SELECT * 
    , DATEPART(MM,monthName+' 01 2014') Mnum 
    FROM @T) 
SELECT CA.* 
FROM CTE C 
CROSS APPLY 
    (SELECT col1, col2, col3, col4, monthName 
    FROM CTE B 
    WHERE B.Mnum-1 = C.Mnum AND (B.col1+B.col2 = C.col4)) CA 
ORDER BY Mnum 

을 , monthname에 숫자를 할당 한 다음 월별 순서대로 해당 세트를 사용하고 CROSS APPLY는 col1과 2의 합계가 이전 달 번호의 col4에 해당하는 행만 선택합니다.

+0

+1 (내가 말할 수있는 한) 교차 적용을 사용하는 대신에 가입해야하지만, –