2012-10-11 31 views
1

我有一個返回16列的查詢。其中12個具有相似的數據(它們返回值0,1或2)。我想用字母來代替這些數字 - 0與L,1 M和2 H.T-SQL - 返回與存儲在數據庫中的幾列不同的值

我可以寫12條case語句,但是這將是矯枉過正,我絕對不希望這樣做。相反,我寧願在前端轉換這些值。有沒有什麼方法可以使用類似於函數的東西(僅在查詢本身內),它會返回適當的值?

請注意,我只讀到數據庫訪問和有成千上萬的數據庫,如這些已經在那裏,因此,創建一個UDF是不可能的。

+0

什麼是你的前端?您可以創建一個枚舉,將一個字符映射到每個數值 – msmucker0527

+0

.NET(C#)。是的,我可以這樣做,但很高興知道是否有某種方式可以通過T-SQL本身處理這樣的問題。 –

+1

我只會寫個案陳述。複製一次然後粘貼11次。更改11個列名稱。並保存查詢。 – Paparazzi

回答

1

在您的前端,如何使用枚舉?你可以有枚舉元素L = 0,M = 1,H = 2。從數據庫中提取(列)數據時,將其轉換爲枚舉類型。當您顯示它時,您可以通過執行ToString來獲取枚舉名稱。
看看this MSDN article

+0

是的,我將使用一個枚舉,如果沒有辦法在t-sql中執行此操作:) –

1

如果你只有讀訪問,你不能創建一個功能,但你可以創建一個公共表表達式,並加入到它十二倍...

WITH LookupTable (numval, returnletter) as (
    SELECT 0,'L' UNION SELECT 1,'M' UNION SELECT 2,'H') 

select LKP1.returnletter as col1, 
     LKP2.returnletter as col2 
     ... 
    from origtable OT 
     inner join LookupTable LKP1 on ot.col1 = LKP1.numval 
     inner join LookupTable LKP2 on ot.col2 = LKP2.numval 
     .... 
+0

我確實考慮過使用您建議的方法,但是12個連接使我無法使用它。 –

+0

聽起來像你需要使用前端處理。使用CTE的好處並不存在,只有3個值。 –

+0

聽起來不錯...前端是。 –

相關問題