如何更改/转换来自SQL Server表的输出中的值

时间:2015-09-20 12:31:04

标签: sql sql-server

我在SQL Server数据库中创建了一个视图,它将为我提供列数。

其中一个列标题为value,此列中的值为PriorityLowMediumHigh

当我执行此视图时,结果将如下所示返回。我想为这些优先级更改或分配值。例如:代替Immediate我应该得到4而不是Low我应该得到3,对于Medium它应该是2而对于High它应该是1 < / p>

我该怎么做才能实现这个目标?

Immediate

2 个答案:

答案 0 :(得分:2)

使用CASE

  

而不是低我应该得到4,而不是中等我应该得到3,为   高,它应该是2,对于立即它应该是1

SELECT 
  [Ticket#],
  [Priority] = CASE Priority
                 WHEN 'Low'       THEN 4
                 WHEN 'Medium'    THEN 3
                 WHEN 'High'      THEN 2
                 WHEN 'Immediate' THEN 1
                 ELSE NULL
               END
FROM table_name;

修改

如果您使用George Botros Solution中的字典表,则需要记住:

1)维护和存储字典表

2)将UNIUQE索引添加到Priority.Name以避免重复,例如:

Priority table
--------------------
Id  |  Name | Value
--------------------
1   |  Low  | 4
2   |  Low  | 4
...

3)即使在词典表中没有相应的值,你也应该使用INNER JOIN来获取所有结果,而不是LEFT JOIN。{/ p>

答案 1 :(得分:1)

我通过创建新的优先级表(Id,Name,Value)为您的问题提供了另一种解决方案 通过加入此表,您可以选择值列

SELECT Ticket.*, Priority.Value 
FROM Ticket INNER JOIN Priority 
ON Priority.Name = Ticket.Priority

注意:虽然使用case关键字是最直接的解决方案 这个问题
如果您需要在系统的许多地方使用此优先级值,此解决方案可能很有用