2011-10-31 2 views
0

특정 조건이 충족되는 경우 "X"를 반환하는 계산 된 열에서 작업하고 있습니다. 기준은 오후 세 열을 기준으로합니다. 테이블에는 실제로 여러 개의 열이 있습니다. COLUMN1 1234의 값을 갖는 경우, 또는SQL Server 2005의 다중 조건 case 문

COLUMN1  COLUMN2  COLUMN3  DATE 
1234   100   300  1/1/2002 
2245   100   500  2/3/2002 
1234   400   400  4/5/2007 
2256   100   500  7/5/2010 
1234   

calcucated 열 회수 및 X 것이다 COLUMN2는 2 년 이내에 2 개 개의 연속 값 < (200)가 있거나 COLUMN3은 2 년 동안

내에서 2 개 개의 연속 값이> 300가 있으면

이 기준 행에 따라 1,3 및 5는 숫자 1234로 인해 X를 반환합니다. 2 열 1에 따르면 1 행에 2보다 적은 200의 값이 있었기 때문에 1이 X를 반환합니다 2 년 내에 ..

어떤 도움을 주시면 감사하겠습니다 ....

+0

에 오신 것을 환영합니다 찾고있는 데이터를 제공한다 : 당신이 코드를 게시 할 경우, XML ** 텍스트 편집기에서 해당 행을 강조 표시하고 편집기 툴바에서 "코드 샘플"버튼 ('{}) '을 클릭하여 멋지게 형식을 지정하고 구문을 강조 표시하십시오! –

+1

고마워요, 마크 ... 할께 ... – baxterxc60

답변

0

이 때문에 참여 자체에 더 큰 데이터 볼륨에 매우 느릴 수 있지만, 당신이 ...에 StackOverflow에

CREATE TABLE #data 
(column1 INT 
,column2 INT 
,column3 INT 
,column4 DATETIME) 
INSERT INTO #data 
SELECT 1234   , 100 ,  300  ,'1/1/2002' UNION ALL 
SELECT 2245  , 100 ,  500  ,'2/3/2002' UNION ALL 
SELECT 1234  , 400 ,  400  ,' 4/5/2007' UNION ALL 
SELECT 2256  , 100 ,  500  ,'7/5/2010' UNION ALL 
SELECT 1234  , NULL,NULL,NULL 

;with CTE AS 
(
SELECT * 
,row_number() OVER (ORDER BY CASE WHEN column4 IS NULL THEN 0 ELSE 1 END DESC) as row 
FROM #data 
) 
SELECT DISTINCT 
c1.row 
,c1.column1 
,c1.column2 
,c1.column3 
,c1.column4 
,CASE WHEN DATEDIFF(YY,c1.column4,c2.column4) < 2 AND c1.column2 < 200 AND c2.column2 < 200 THEN 'X' 
     WHEN c1.column1 = 1234 THEN 'X' 
     WHEN DATEDIFF(YY,c1.column4,c2.column4) < 2 AND c1.column3 > 300 AND c2.column3 > 300 THEN 'X' 
     END AS column5 
FROM CTE c1 
LEFT OUTER JOIN CTE c2 
ON c1.row + 1 = c2.row 
ORDER BY c1.row ASC 
+0

위대한,이 시도를 줄 것이다 ... 내 결과를 게시 할 것입니다 .. 정말 고마워요. – baxterxc60