2013-11-21 47 views
-2

我在應用case..when中的where子句時遇到問題。當我將0和4之間的值放在where子句中時,我會得到預期的結果,但在應用案例時,它會失敗。數據不能讀取where子句

表名:MYTBL

data | amount | date  | ReceiptFrequency 

    A  2000  02-03-1988  Annual 
    A  2000  02-03-1990  Semiannual 
    A  2000  02-03-1991  Annual 
    A  2000  02-03-1992  Annual 
create TABLE #Table (num int NOT NULL,); 

;WITH Nbrs (n) AS (
    SELECT 1 UNION ALL 
    SELECT 1 + n FROM Nbrs WHERE n < 60) 
    INSERT #Table(num) 
    SELECT n FROM Nbrs 
OPTION (MAXRECURSION 60) 

SELECT *FROM #Table AS x,#Table AS y,myTbl AS d 
    WHERE (d.ReceiptFrequency<>'Random') AND(x.num BETWEEN 0 AND 1(CASE WHEN d.ReceiptFrequency='Annual' THEN 1 WHEN d.ReceiptFrequency='Quarter' THEN 1 WHEN d.ReceiptFrequency='Month' THEN 12 WHEN d.ReceiptFrequency='SemiAnnual' THEN 2 ELSE 1 END -1)) 
+0

你能詳細說明*它會得到更好的結果嗎?你究竟想達到什麼目的?您的預期結果將非常有幫助。 – GarethD

+0

如果ReceiptFrequency是Month和12,如果ReceiptFrequency是Semi-Annual,那麼2,如果ReceiptFrequency是Annual,那麼你應該使用4作爲ReceiptFrequency Quarter? – Nilesh

回答

1

爲什麼-1你CASE..WHEN結束?

CASE WHEN d.ReceiptFrequency='Annual' THEN 1 WHEN d.ReceiptFrequency='Quarter' THEN 1 WHEN d.ReceiptFrequency='Month' THEN 12 WHEN d.ReceiptFrequency='SemiAnnual' THEN 2 ELSE 1 END -1))