【问题标题】:Combining column name is causing error组合列名导致错误
【发布时间】:2016-08-26 10:31:30
【问题描述】:

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

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

但我收到一个错误:

将数据类型 varchar 转换为数值时出错。

这是可用的示例数据

【问题讨论】:

  • 我想 emp_car_no 是一个整数字段?比使用这个:Program_name + ' ' + convert(varchar, emp_car_no)

标签: sql sql-server sql-server-2005


【解决方案1】:

试试这个:

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

【讨论】:

  • 是的,它来了,我只想将它显示为 Saiwadi (2552)。然后 ?我的意思是,我想要卡号的支架
  • @stack 我已经编辑了我的答案,所以卡号在括号之间
【解决方案2】:

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

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

【讨论】:

  • 还有一件事,我想显示 Program_id 代替 emp_card_no 那么如何获得呢?
  • 如果 Program_id 不是 VARCHAR,只需替换 emp_card_no,如果 VARCHAR 不需要强制转换,也替换为 emp_card_no
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    您可以使用 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
    

    【讨论】:

      【解决方案5】:

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

      以下是您的解决方案,对案例陈述进行了改进。

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-09
        • 1970-01-01
        • 2023-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多