将列合并到一列SQL Server中

And*_*dAL 2 sql sql-server case

我要做的是将多个列合并为一个.假设我有一个表Player,这个表包含多个列,例如name, team, goalie, left back, right back, center back , left midfield.... and description.

description列将包含name+ team+ left back,因此description也是如此Ronaldo - Madrid - Forward.当玩家只有一个位置但不能超过一个位置时,我可以填充描述栏吗?

我的SQL:

select 
    name, team, goalie,
    leftback, rightback, centerback,
    left midfield,
    ......,
    name + ' - ' + team + ' - '+ 
    CASE 
       WHEN goalie = 'yes' THEN 'Goalie' 
       WHEN leftback = 'yes' THEN 'Left Back'
       WHEN rightback = 'yes' THEN 'Right Back'
       WHEN centerback = 'yes' THEN 'Center Back'
       .......
    END AS Description
from 
    player
Run Code Online (Sandbox Code Playgroud)

输出:

Ronaldo - Madrid - Forward
Run Code Online (Sandbox Code Playgroud)

如果玩家有多个位置,如何让它添加多个位置呢?

谢谢

Jua*_*eza 5

select 
   name,
   team, 
   CASE WHEN goalie = 'yes'      THEN 'Goalie - '      ELSE '' END + 
   CASE WHEN leftback = 'yes'    THEN 'LeftBack - '    ELSE '' END + 
   CASE WHEN rightback = 'yes'   THEN 'RightBack - '   ELSE '' END + 
   CASE WHEN center back = 'yes' THEN 'Center Back - ' ELSE '' END AS Description
Run Code Online (Sandbox Code Playgroud)

你必须删除最后一个-描述

SQL Server +2012的版本

WITH cte as (
   SELECT
      name,
      team, 
      IIF(goalie = 'yes',      'Goalie - ', '') + 
      IIF(leftback = 'yes',    'LeftBack - ', '') + 
      IIF(rightback = 'yes',   'RightBack - ', '') + 
      IIF(center back = 'yes', 'Center Back - ', '') AS Description
   FROM Players
)
SELECT name,
       team,
       CASE LEN(Description) 
          WHEN 0 THEN Description 
          ELSE LEFT(Description, LEN(Description) - 3)
       END
FROM cte
Run Code Online (Sandbox Code Playgroud)

使用查看版本的注释 STUFF