我正在编写一个简单的SELECT查询来从SQL表中检索一组项目编号。
现在从这个表中,我想获得Item类型,它可以是三个中的一个。 Make, Buy or undefined
。
我的问题是,这在数据库中以数字表示。我的表中有一个名为ITMTYPE
的列,但是说1 or 2 or 3 for Make, Buy or undefined
。
有人可以告诉我一种向我的选择查询添加列的方法,可以显示项目类型的等效措辞吗?
以下是我想看到的内容,
Item_Number Item_Type_Num Item Type_val
A 1 Make
B 2 Buy
C 3 Undefined
D 2 Buy
E 1 Make
这第三栏是我想看到的。 感谢
答案 0 :(得分:3)
您可以使用CASE EXPRESSION
:
SELECT t.Item_Number,t.ITMTYPE as Item_Type_Num,
CASE WHEN t.ITMTYPE = 1 THEN 'Make'
WHEN t.ITMTYPE = 2 THEN 'Buy'
WHEN t.ITMTYPE = 3 THEN 'undefined'
END as Item_Type_Val
FROM YourTable t
如果您对此专栏有日常需求,我建议您将其添加到表格中:
ALTER TABLE YourTable
ADD Item_Val_Type VARCHAR2(10);
然后更新它:
UPDATE YourTable t
SET t.Item_Val_Type = CASE WHEN t.ITMTYPE = 1 THEN 'Make'
WHEN t.ITMTYPE = 2 THEN 'Buy'
WHEN t.ITMTYPE = 3 THEN 'undefined'
END;
答案 1 :(得分:1)
使用简单的案例表达。
select
Item_Number,
Item_Type_Num ,
Case Item_Type_Num
when 1 then 'Make'
when 2 then 'Buy'
when 3 then 'Undefined'
else 'Unknown'
end as 'Item_type_val'
from Yourtable
答案 2 :(得分:0)
#include <stdio.h>
#include <math.h>
#include <float.h>//for DBL_MIN and DBL_MAX
#include <fenv.h>
#pragma STDC FENV_ACCESS ON
void show_fe_exceptions(void)
{
printf("exceptions raised:");
if(fetestexcept(FE_DIVBYZERO)) printf(" FE_DIVBYZERO");
if(fetestexcept(FE_INEXACT)) printf(" FE_INEXACT");
if(fetestexcept(FE_INVALID)) printf(" FE_INVALID");
if(fetestexcept(FE_OVERFLOW)) printf(" FE_OVERFLOW");
if(fetestexcept(FE_UNDERFLOW)) printf(" FE_UNDERFLOW");
feclearexcept(FE_ALL_EXCEPT);
printf("\n");
}
int main(void)
{
printf("MATH_ERREXCEPT is %s\n",
math_errhandling & MATH_ERREXCEPT ? "set" : "not set");
printf("0.0/0.0 = %f\n", 0.0/0.0);
show_fe_exceptions();
printf("1.0/0.0 = %f\n", 1.0/0.0);
show_fe_exceptions();
printf("1.0/10.0 = %f\n", 1.0/10.0);
show_fe_exceptions();
printf("sqrt(-1) = %f\n", sqrt(-1));
show_fe_exceptions();
printf("DBL_MAX*2.0 = %f\n", DBL_MAX*2.0);
show_fe_exceptions();
printf("nextafter(DBL_MIN/pow(2.0,52),0.0) = %.1f\n",
nextafter(DBL_MIN/pow(2.0,52),0.0));
show_fe_exceptions();
}