2013-07-23 43 views
-2

我有一個數據表(TestTable的),如下案例結構與許多當子句

enter image description here

我需要建立基於可樂,年齡,性別列值計算列「帶」。像下面

CASE 

WHEN ColA='A' AND AGE=1 AND GENDER='M' THEN 'BANDX90' 
WHEN ColA='A' AND AGE=1 AND GENDER='F' THEN 'BANDX91' 
. 
. 
. 
. 
WHEN ColA='A' AND AGE=65 AND GENDER='M' THEN 'BANDX18' 
WHEN ColA='A' AND AGE=65 AND GENDER='F' THEN 'BANDX19' 
WHEN ColA='B' AND AGE=1 AND GENDER='M' THEN 'BANDX39' 
WHEN ColA='B' AND AGE=1 AND GENDER='F' THEN 'BANDX56' 
ELSE NULL 
END AS BAND   

注:我的用戶/客戶端已經提供我BAND值(「BANDX90」,...),用於不同當在Excel工作表的條件。

上述CASE方法的缺點是,如果我在表中有500條記錄,那麼我必須使用CASE 'WHEN' STMT 500 TIMES這不是一個好的選擇。

有人在計算列時面臨同樣的情況嗎?如果是,請分享您的建議!

有沒有其他辦法可以做到這一點?

+1

是否有**'BANDX ??'** – Luv

+0

我的網絡隱藏了一些限制,任何邏輯來自我的圖像。所以如果可能的話,請你輸入欄目? – kbvishnu

+0

沒有任何邏輯。我的用戶/客戶端爲我提供了在Excel表格中不同條件下的BAND值('BANDX90',....)。 –

回答

1

如果沒有爲BANDX__沒有邏輯那麼你最好使用表中的列,這將是你的Then聲明。

Here is SQLFiddelDemo

下面是PIC這表明我的觀點:

enter image description here

+0

您能詳細解釋一下這個答案嗎?也許在這裏添加一點SQL? – Dirk

+0

非常感謝 –

5

我的用戶/客戶端在excel工作表中爲不同的WHEN條件提供了BAND值('BANDX90',....)。

我認爲這將是很容易把這個BAND值信息table(BandValues)與頭部像

Col1 Age Gender Band_Value 

不是邏輯:

Update T 
Set T.Band = B.Band_Value 
From Testtable T 
INNER JOIN BandValues B 
ON T.Col1=B.Col1 
AND T.Age=B.Age 
AND T.Gender=B.Gender 
+0

感謝您的迴應盧夫!我無法使用連接,因爲Testtable是摘要(groupby)表 –

+0

,如果您可以提供測試表的精確列,我將能夠解決。 – Luv

+1

@ oOoTesting1oOo - 將這些數據存儲在表中並執行某種形式的連接或查找絕對是一種方式。您可以使用子查詢或CTE執行「GROUP BY」步驟「第一個」 –