2014-10-29 48 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