1

他の 1 つの列の値に基づいて、最大 9 列の結果を置き換える必要があります。列「役割」の値が「SeniorManagement」の場合、デフォルトの階層値をハード値に置き換えたいと思います。これを今すぐ達成する方法は次のとおりです。

 , 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 に答える