我在SQL Server数据库中创建了一个视图,它将为我提供列数。
其中一个列标题为value
,此列中的值为Priority
,Low
,Medium
和High
。
当我执行此视图时,结果将如下所示返回。我想为这些优先级更改或分配值。例如:代替Immediate
我应该得到4而不是Low
我应该得到3,对于Medium
它应该是2而对于High
它应该是1 < / p>
我该怎么做才能实现这个目标?
Immediate
答案 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
关键字是最直接的解决方案
这个问题
如果您需要在系统的许多地方使用此优先级值,此解决方案可能很有用