显示“活动”表示值为“A”的行

时间:2013-08-11 14:37:50

标签: sql sql-server-2008

我有一个名为course的表,它有两列topicstatus ..

表格中有三行..

('Computer','A')
('Science','I')
('History','A')

显示表格中的值时,我想为Active显示A,为Inactive显示I ..我该怎么做...请帮助我这里。

5 个答案:

答案 0 :(得分:2)

SELECT topic, 
       CASE status                     
         WHEN  'A' THEN 'Active'
         WHEN  'I' THEN 'Inactive'
       END
FROM course 
WHERE condition;

对于一般case语句语法。

答案 1 :(得分:2)

另一个答案都指出了查询的正确方法。这个答案是解释你如何直接“烘焙”到表中。也就是说,您可以在字段中存储'A''I',但可以检索'Active''Inactive'

为此,我将表中的列重命名为`_status':

第一种方法是使用视图:

create view vw_table as 
    select <other columns>,
           (case when _status = 'A' then 'Active'
                 when _status = 'I' then 'Inactive'
            end) as status
    from t;

然后,您的应用程序代码始终使用该视图,并确保您所需的状态。在SQL Server中,您还可以在表定义中添加计算列:

alter table
    add column status as (case when _status = 'A' then 'Active'
                               when _status = 'I' then 'Inactive'
                          end);

使用视图或计算列的优点是拼写和定义始终相同。

最后,通常您希望将这些字符串转换为引用表。在这种情况下,您实际上在原始表中有statusIDstatus表具有真实定义。对于具有明确定义的二进制值,这可能是过度的。另一方面,如果您正在学习SQL,这可能是学习创建引用表(并进一步规范化数据结构)的好机会。

答案 2 :(得分:1)

SELECT Topic, 
    CASE Status  
        WHEN 'A' THEN 'Active' 
        WHEN 'I' THEN 'Inactive' 
        -- ELSE '' -- only if you need it
    END AS [Status]
FROM course 

答案 3 :(得分:1)

尝试CASE声明

select topic, 
case status when 'A' Then 'Active' WHen 'I' Then 'Inactive' END Status
from table

答案 4 :(得分:1)

您可以使用CASE

SELECT ...,
  CASE ... WHEN ... THEN 'Active' ELSE 'Inactive'
  ...
FROM table