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