组合列名导致错误

Combining column name is causing error

我有两列要合并并显示数据,我试过如下

select 
    case 
       when status = 'R' 
          then 'Resign'
       when status = 'A' 
          then 'Active' 
    end as status1, 
    Program_name + ' ' + emp_card_no as program_details,
    * 
from 
    GetEmployeeDetails
where 
    emp_name = 'ABHAY ASHOK MANE'
    and STATUS = 'A' 
order by
    EMP_NAME

但我收到一个错误:

Error converting data type varchar to numeric.

这是可用的示例数据

试试这个:

select 
  case when status='R' then 'Resign'
       when status='A' then 'Active' 
  end as status1, 
  Program_name + ' (' + convert(varchar, emp_card_no) + ') ' as program_details,
* 
from GetEmployeeDetails
Where emp_name ='ABHAY ASHOK MANE'and STATUS= 'A' ORDER BY EMP_NAME

如果需要括号,请使用以下内容:

select 
  case when status='R' then 'Resign'
       when status='A' then 'Active' 
  end as status1, 
  Program_name + ' (' + convert(varchar(10), emp_card_no)+')' as program_details,
* 
from GetEmployeeDetails
Where emp_name ='ABHAY ASHOK MANE'and STATUS= 'A' ORDER BY EMP_NAME

CAST 到 VARCHAR 的 Int 值列:

在您的查询中 将 emp_card_no 转换为 VARCHAR

select 
    case when status='R' then 'Resign'
    when status='A' then 'Active' end as status1, 
    [Program_name] + ' ' + CAST(emp_card_no AS VARCHAR(50)) as program_details,
* 
from GetEmployeeDetails
Where emp_name ='ABHAY ASHOK MANE'and STATUS= 'A' ORDER BY EMP_NAME

您可以使用 concat 来进行内部转换..

select case when status='R' then 'Resign'
when status='A' then 'Active' end as status1, 
 concat(Program_name, ' ', emp_card_no) as program_details,
* from GetEmployeeDetails
Where emp_name ='ABHAY ASHOK MANE'and STATUS= 'A' ORDER BY EMP_NAME

可以对字符串类型的值进行列组合。所以如果不是,则必须将列转换为 varchar 数据类型。

下面是您的解决方案,对 case 语句进行了改进。

select 
case status 
   when 'R' 
      then 'Resign'
   when 'A' 
      then 'Active' 
end as status1, 
Program_name + ' ' + convert(varchar(50),emp_card_no) as program_details,
* 
from 
GetEmployeeDetails
where 
emp_name = 'ABHAY ASHOK MANE'
and STATUS = 'A' 
order by
EMP_NAME