2014-10-29 119 views
0

我从使用Telerik独立报告应用程序提取数据。我有一个名为“产品”的表格之一,名为“ProductStatus”。 ProductStatus是一个介于1-12之间的整数值。下面分解:SQL表达式帮助

"1"=Active 
"2"=Retired 
"3"=Processing 
"5"=Archived 
"6"=Active-Empty 
"7"=Available 
"8"=Resigned 
"9"=Terminated 
"10"=Legal Freeze 
"11"=Admin Hold 
"12"=Reserved 

我的问题是:我怎么能写会看“ProductStatus”和一个表达式,如果= 1,则返回“Active”,或者如果= 2,然后返回“Retired”等

+0

在线搜索书籍(SQL Server文档)“CASE”。 – 2014-10-29 17:48:26

+2

是否有另一张产品状态表,它将每个数字状态映射到其字符串表示形式?关系数据库通常以这种方式构建,允许您“加入”表。 – 2014-10-29 17:49:05

+0

Berkowski先生 - 不,没有其他表格定义了什么数值=。我知道数值的含义,但需要以更友好的方式显示。 – 2014-10-29 17:56:26

回答

0

你有2种方式来做到这一点

  • 使用CASE和代码在请求中转换表

    SELECT CASE WHEN 1 THEN 'Active' ... END FROM ...; 
    
  • 把转换表在数据库表和使用连接:

    CREATE TABLE product_status(id INTEGER, status VARCHAR(32)); 
    INSERT INTO product_status(id, status) VALUES(1, 'Active'); 
    ... 
    SELECT ps.status, ... FROM product_status, ... WHERE product_status.id = ..., ... ; 
    
0

您可以创建一个表,这样所有的状态文本:

CREATE TABLE statusText 
    ([id] int, [text] varchar(12)) 
; 

INSERT INTO statusText 
    ([id], [text]) 
VALUES 
    (1, 'Active'), 
    (2, 'Retired'), 
    (3, 'Processing'), 
    (5, 'Archived'), 
    (6, 'Active-Empty'), 
    (7, 'Available'), 
    (8, 'Resigned'), 
    (9, 'Terminated'), 
    (10, 'Legal Freeze'), 
    (11, 'Admin Hold'), 
    (12, 'Reserved') 
; 

而且然后加入产品表如下:

SELECT a.*, b.Text 
FROM Products a INNER JOIN statusText b 
    ON a.ProductStatus=b.id