SQL Expression Assistance

时间:2014-10-29 17:46:58

标签: sql sql-server-2014

我正在使用Telerik独立报告应用程序提取数据。我有一个名为" Product"其中一列被称为" ProductStatus"。 ProductStatus是一个介于1-12之间的int值。细分如下:

"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"等

2 个答案:

答案 0 :(得分: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 = ..., ... ;
    

答案 1 :(得分: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')
;

然后像这样加入Products表:

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