2012-10-11 32 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

听起来不错...前端是。 –

相关问题