2016-12-14 63 views
1

試圖寫一個CASE表達式,我需要評估Family_sizeIncome的組合以設置Status AS如果有任何組合爲真,組合條件字段格式中的CASE表達式

CASE 
    ((WHEN Family_size = 1 AND Income <=11800) 
     OR(WHEN Family_size = 2 AND Income <=16020) 
     OR(WHEN Family_size = 3 AND Income <=20160) 
     OR(WHEN Family_size = 4 AND Income <=24300) 
     OR(WHEN Family_size = 5 AND Income <=28400) 
     OR(WHEN Family_size = 6 AND Income <=32580) 
     OR(WHEN Family_size = 7 AND Income <=36730) 
     OR(WHEN Family_size = 8 AND Income <=40890) 
    THEN 'Below' ELSE 'Above' END) AS [Status] 

這給了錯誤:

Incorrect syntax near the keyword 'WHEN'

是否有一個巧妙的方法或將我單獨寫THEN 'Below'?像:

CASE 
     WHEN Family_size = 1 AND Income <=11800 THEN 'Below' 
     WHEN Family_size = 2 AND Income <=16020 THEN 'Below' 
and so on... 
+2

'WHEN' ** once **,然後只是'OR'您的條件 –

+0

您提出的建議是完全有效的。 –

+0

我不知道誰在重複答案中的投票,所以我猜想大聲笑 – AS91

回答

2

基礎上,federal poverty guideline 2016修正後。

基於這些poverty guidelines包括家庭附加校正尺寸大於8

select [Status] = 
    case 
    when (Family_size = 1 and Income <=11880) -- Corrected to 11880 for federal poverty guideline 2016 
    or(Family_size = 2 and Income <=16020) 
    or(Family_size = 3 and Income <=20160) 
    or(Family_size = 4 and Income <=24300) 
    or(Family_size = 5 and Income <=28440) -- Corrected to 28440 for federal poverty guideline 2016 
    or(Family_size = 6 and Income <=32580) 
    or(Family_size = 7 and Income <=36730) 
    or(Family_size = 8 and Income <=40890) 
    then 'Below' else 'Above' end as 

可以被重寫爲:

select [Status] = case 
    when Family_size < 7 and Income <= (11880 + ((family_size-1)*4140)) 
     then 'Below' 
    when Family_size >= 7 and Income <= (36730 + ((family_size-7)*4160)) 
     then 'Below' 
     else 'Above' 
     end 

爲了證實方程是在上述情況下正確聲明,您可以檢查此rextester鏈接,它使用相同的公式生成1-12的貧困表:http://rextester.com/AWRCK1808

您可能需要考慮國家,因爲阿拉斯加和夏威夷的貧困人口數量不同。

+0

這就是我一直在尋找的。謝謝! – AS91

+0

是(11880 +(family_size -1)* 4140)7歲以下家庭的聯邦標準配方? – AS91

+1

是的。 7人得到4150。第7名以後,8人以上獲得每人4160分。 – SqlZim

2

嘗試

SELECT CASE 
    WHEN (Family_size = 1 AND Income <=11800) 
     OR(Family_size = 2 AND Income <=16020) 
     OR(Family_size = 3 AND Income <=20160) 
     OR(Family_size = 4 AND Income <=24300) 
     OR(Family_size = 5 AND Income <=28400) 
     OR(Family_size = 6 AND Income <=32580) 
     OR(Family_size = 7 AND Income <=36730) 
     OR(Family_size = 8 AND Income <=40890) 
    THEN 'Below' ELSE 'Above' END AS [Status] 
2

如上試評論:

CASE WHEN (Family_size = 1 AND Income <=11800) 
    OR (Family_size = 2 AND Income <=16020) 
    OR (Family_size = 3 AND Income <=20160) 
    OR (Family_size = 4 AND Income <=24300) 
    OR (Family_size = 5 AND Income <=28400) 
    OR (Family_size = 6 AND Income <=32580) 
    OR (Family_size = 7 AND Income <=36730) 
    OR (Family_size = 8 AND Income <=40890) 
    THEN 'Below' ELSE 'Above' END AS [Status]