在SQL中将一个值映射到另一个值

在SQL中将一个值映射到另一个值,sql,Sql,我有下面的SQL和相应的结果。我必须做什么才能得到以下预期结果。我的意思是我想把数值映射到varchar值描述 SELECT COUNT(*), STATUS FROM TABLEA GROUP BY STATUS; 预期结果 COUNT(*) STATUS ---------- ---------- 4 INVALID 47 FAIL 100 SUCCESS 对于下面给出的问题,

我有下面的SQL和相应的结果。我必须做什么才能得到以下预期结果。我的意思是我想把数值映射到varchar值描述

SELECT COUNT(*),
  STATUS
FROM TABLEA
GROUP BY STATUS; 

预期结果

 COUNT(*) STATUS
---------- ----------
         4          INVALID
        47          FAIL
       100         SUCCESS 

对于下面给出的问题,按如下方式使用
解码将解决此问题:

SELECT COUNT(*),
DECODE(STATUS, '1'  , 'FAIL',
               '8'  , 'INVALID, 
               '11' , 'SUCCESS'  
                    , 'INVALID_STATUS') STATUS
FROM TABLEA
GROUP BY STATUS;
我假设您将映射如下:

STATUS   |  STATUSTEXT
1        |  FAIL
8        |  INVALID
11       |  SUCCESS
ANYOTHER |  INVALID_STATUS
如果有单独的状态主表,则可以使用:

SELECT COUNT(*) RECORD_COUNT, b.STATUS_NAME  STATUS_TEXT
FROM TABLEA A,TABLEB AS b 
WHERE
B.STATUS = A.STATUS (+)
GROUP BY b.STATUS_NAME  
表B的列和值如下所示

STATUS   |  STATUS_NAME
---------+---------------
1        |  FAIL
8        |  INVALID
11       |  SUCCESS
15       |  IGNORE
使用
(+)
将为您提供所有状态的计数。如果没有具有特定状态(如D)的记录,则D也将显示在输出中,相应的值为0

SELECT COUNT(*),
        CASE STATUS
            WHEN 8 THEN 'INVALID'
            WHEN 1 THEN 'FAIL'
            WHEN 11 THEN 'SUCCESS'
            ELSE 'UNKNOWN'
        END AS STATUS
FROM TABLEA
GROUP BY STATUS
如果您有一个将状态代码映射到名称的表,它将是:

SELECT COUNT(*), b.NAME
FROM TABLEA AS a
JOIN TABLEB AS b ON a.STATUS = b.STATUS
GROUP BY b.NAME

您有包含映射的表吗?如果是的话,就加入吧。如果没有,请使用
案例
。一些示例数据会有所帮助@8610510697121107117110997114不,不会的。如果您使用CASE或DECODE之类的方法进行映射,那么语法取决于SQL的版本。如果是这样的话,请将这个问题标记为MySQL/sqlserver/Oracle/PostgreSQL/etc。
SELECT COUNT(*), b.NAME
FROM TABLEA AS a
JOIN TABLEB AS b ON a.STATUS = b.STATUS
GROUP BY b.NAME