2011-10-31 37 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