1

我需要根据另一列值替换最多 9 列的结果。如果列“角色”是值“高级管理”,我想用硬值替换默认的层次值。我现在可以这样做:

 , CASE
   WHEN d.Role = 'SeniorManagement'  
   THEN (Replace(p.Firstname,'John','Joe')) END as First
 , CASE
   WHEN d.Role = 'SeniorManagement'  
   THEN (Replace(p.Lastname,'TopDog','AssignedPerson')) END as Last
 , CASE...

我的问题是,有没有更简洁的方法来组合这些?

伪(我知道这不起作用:-)

 , CASE
    WHEN d.Role = 'SeniorManagement' 
    THEN (Replace(p.Firstname,'John','Joe')) as First 
    THEN (Replace(p.Lastname,'TopDog','AssignedPerson')) as Last
    THEN (Replace(p.Email,'TopDog@wherever','AssignedPerson@wherever')) as Email

谢谢

4

2 回答 2

1

使用函数呢?

create function dbo.GetColumnValue
(
   @ColumnBasedValue varchar(max),
   @ColumnToReplace varchar(max), --or the type you want
   @ToReplace varchar(max), 
   @Replacement varchar(max)
)
as
BEGIN

return (select case @ColumnBasedValue when 'SeniorManagement'
                      then (Replace(@ColumnToReplace,@ToReplace,@Replacement))
                      else @replaceValue END)

END

并像使用它一样

select dbo.GetColumnValue(d.Role, p.Firstname,'John','Joe') as First, 
dbo.GetColumnValue(d.Role, p.Lastname,'TopDog','AssignedPerson') as Last..
于 2013-01-23T17:15:45.917 回答
0

根据上下文的不同,您可能能够摆脱原始选择。

Select d.Role, 'Joe' as First, 'AssignedPerson' as Last

并且只需使用 where 子句过滤每个选择。

如果要执行多个,请使用联合。

于 2013-01-23T16:58:15.890 回答