2011-10-31 55 views
0

我正在处理计算列,如果满足特定条件,将返回“X”。标准基于下面三列。该表实际上有几列。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如果COLUMN1具有1234值,或者如果COLUMN2具有2年的时间内的连续的2个值< 200或栏3具有2年期间

内的连续的2个值> 300

根据这个标准,行1,3和5将返回一个X,因为编号为1234. 根据第2行,第1行将返回一个X,因为连续两次的值小于200在2年内..

任何帮助将不胜感激....

+0

欢迎StackOverflow的数据:如果您发布的代码,XML或数据样本,**请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码样本”按钮(“{}”)以精确地格式化和语法突出显示它! –

+1

谢谢,马克...会做... – baxterxc60

回答

0

这可能是在更大的数据量非常缓慢,由于自连接,但应为您提供您正在寻找...

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