我有一個返回16列的查詢。其中12個具有相似的數據(它們返回值0,1或2)。我想用字母來代替這些數字 - 0與L,1 M和2 H.T-SQL - 返回與存儲在數據庫中的幾列不同的值
我可以寫12條case語句,但是這將是矯枉過正,我絕對不希望這樣做。相反,我寧願在前端轉換這些值。有沒有什麼方法可以使用類似於函數的東西(僅在查詢本身內),它會返回適當的值?
請注意,我只讀到數據庫訪問和有成千上萬的數據庫,如這些已經在那裏,因此,創建一個UDF是不可能的。
我有一個返回16列的查詢。其中12個具有相似的數據(它們返回值0,1或2)。我想用字母來代替這些數字 - 0與L,1 M和2 H.T-SQL - 返回與存儲在數據庫中的幾列不同的值
我可以寫12條case語句,但是這將是矯枉過正,我絕對不希望這樣做。相反,我寧願在前端轉換這些值。有沒有什麼方法可以使用類似於函數的東西(僅在查詢本身內),它會返回適當的值?
請注意,我只讀到數據庫訪問和有成千上萬的數據庫,如這些已經在那裏,因此,創建一個UDF是不可能的。
在您的前端,如何使用枚舉?你可以有枚舉元素L = 0,M = 1,H = 2。從數據庫中提取(列)數據時,將其轉換爲枚舉類型。當您顯示它時,您可以通過執行ToString來獲取枚舉名稱。
看看this MSDN article。
是的,我將使用一個枚舉,如果沒有辦法在t-sql中執行此操作:) –
如果你只有讀訪問,你不能創建一個功能,但你可以創建一個公共表表達式,並加入到它十二倍...
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
....
我確實考慮過使用您建議的方法,但是12個連接使我無法使用它。 –
聽起來像你需要使用前端處理。使用CTE的好處並不存在,只有3個值。 –
聽起來不錯...前端是。 –
什麼是你的前端?您可以創建一個枚舉,將一個字符映射到每個數值 – msmucker0527
.NET(C#)。是的,我可以這樣做,但很高興知道是否有某種方式可以通過T-SQL本身處理這樣的問題。 –
我只會寫個案陳述。複製一次然後粘貼11次。更改11個列名稱。並保存查詢。 – Paparazzi