查询名字,姓氏字段,以便它可以在case语句中使用

时间:2017-08-28 17:39:05

标签: sql-server-2008 concat

我必须重新创建存在于DB1中的存储过程,并将现有表映射到新数据库DB2中的新表。

DB1,表格中有列Fullname,在新数据库中有两列firstnamelastname。我可以有concat但是有一个用户定义的函数也会截断我必须使用的所有特殊字符。

如何将名字和姓氏列用作一个全名列,以便它适合此case语句?

我从另一个注册了enr的表中得到了[P Name],这个表就像拥有所有名称的主表一样,从case表中获取名称的条件如case case所示。

我尝试搜索所有博客和stackexchange但无法获得所需的回复。

masterfinancer = dbo.fn_RemoveSpecialChars(iif(enr.p_name = 'XXXXXXXXX,XXXXXXX(2)', 'XXXXX XXXX XXX GROUP', mv.master_vendor_name))
Sma_finace_key = iif(enr.p_name = 'XXXXXXXXX0L(2)', 1111, mv.ven_key)

[P Name]  = case 
               when enr.p_name = 'INACTIVE ' or enr.p_name = 'UNASSIGNED'
                  then [P Name] 
                  else dbo.fn_RemoveSpecialChars(enr.p_name) 
            end 

1 个答案:

答案 0 :(得分:0)

您需要在每个单独的字段上使用该功能并将它们连接在一起。在这里,我删除了IIF语句(仅适用于SQL 2012)并创建了一个FullName字段,假定您想要“First,Last”。我添加了COALESCE以避免当名字或姓氏为NULL时FullName字段为NULL:

SELECT
    masterfinancer = dbo.fn_RemoveSpecialChars(
            CASE 
                WHEN enr.p_name = 'XXXXXXXXX,XXXXXXX(2)' 
                THEN 'XXXXX XXXX XXX GROUP' 
                ELSE mv.master_vendor_name 
            END)
    , Sma_finace_key = 
            CASE 
                WHEN enr.p_name = 'XXXXXXXXX0L(2)' 
                THEN 1111 
                ELSE mv.ven_key 
            END
    , [P Name]  = 
            CASE 
                WHEN enr.p_name IN('INACTIVE ', 'UNASSIGNED')
                THEN [P Name] 
                ELSE dbo.fn_RemoveSpecialChars(enr.p_name) 
            END
, FullName = 
    COALESCE(dbo.fn_RemoveSpecialChars(enr.last_name) + ', ', '') + 
    COALESCE(dbo.fn_RemoveSpecialChars(enr.first_name), '')