将列合并为一列 SQL 服务器
Combining columns into one column SQL Server
我想做的是将多列合并为一列。假设我有一个名为 Player
的 table,这个 table 包含多个列,例如 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
输出:
Ronaldo - Madrid - Forward
如果玩家有多个位置,我如何让它添加多个位置?
谢谢
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
并且您必须删除描述中的最后一个 -
SQL 服务器的版本 +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
使用STUFF
检查版本的评论
我不喜欢 CASE
语句,并且希望尽可能避免使用它们。你可以逃脱这样的事情:
select stuff (
isnull(replace(replace(goalie,'no',''),'yes',' - Goalie'),'')
+ isnull(replace(replace(leftback,'no',''),'yes',' - Leftback'),'')
+ isnull(replace(replace(rightback,'no',''),'yes',' - Rightback'),'')
....
,1,3,''
) as 'Description'
from Player
如果 goalie
等的唯一值是 'yes'、'no' 和 NULL。
我想做的是将多列合并为一列。假设我有一个名为 Player
的 table,这个 table 包含多个列,例如 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
输出:
Ronaldo - Madrid - Forward
如果玩家有多个位置,我如何让它添加多个位置?
谢谢
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
并且您必须删除描述中的最后一个 -
SQL 服务器的版本 +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
使用STUFF
我不喜欢 CASE
语句,并且希望尽可能避免使用它们。你可以逃脱这样的事情:
select stuff (
isnull(replace(replace(goalie,'no',''),'yes',' - Goalie'),'')
+ isnull(replace(replace(leftback,'no',''),'yes',' - Leftback'),'')
+ isnull(replace(replace(rightback,'no',''),'yes',' - Rightback'),'')
....
,1,3,''
) as 'Description'
from Player
如果 goalie
等的唯一值是 'yes'、'no' 和 NULL。