sql向每行添加其他行
是否可以根据字段值向选定集添加其他行 我有一个疑问:sql向每行添加其他行,sql,sql-server,tsql,sql-server-2012,Sql,Sql Server,Tsql,Sql Server 2012,是否可以根据字段值向选定集添加其他行 我有一个疑问: WITH CTEDivisions AS ( SELECT .... ) SELECT cnt, Division FROM CTEDivisions 返回: cnt Division 1 Sales 2 Marketing 1 Business 2 IT etc... 我需要的是一个语句,它
WITH CTEDivisions AS
(
SELECT ....
)
SELECT
cnt,
Division
FROM CTEDivisions
返回:
cnt Division
1 Sales
2 Marketing
1 Business
2 IT
etc...
我需要的是一个语句,它在cnt=2
时返回3行额外的数据,如:
Division NewDivision
Sales Sales
Marketing Marketing - X
Marketing Marketing - Y
Marketing Marketing - Z
Business Business
IT IT - X
IT IT - Y
IT IT - Z
etc...
我已经找到了实现这一点的方法,并使用
游标
和WHILE
循环找到了一些可能的解决方案,但这些方法似乎不能与CTE
语句结合使用。为您的额外行创建一个表(作为CTE或永久表),并使用您的条件将其左连接(cnt=2
):
结果集
cnt Division NewDivision
1 Sales Sales
2 Marketing Marketing - X
2 Marketing Marketing - Y
2 Marketing Marketing - Z
1 Business Business
2 IT IT - X
2 IT IT - Y
2 IT IT - Z
不客气。由@Giorgi Nakeuri提供的答案产生了几乎相同的执行计划。
OUTER APPLY
在本例中的作用类似于LEFT JOIN
。
cnt Division NewDivision
1 Sales Sales
2 Marketing Marketing - X
2 Marketing Marketing - Y
2 Marketing Marketing - Z
1 Business Business
2 IT IT - X
2 IT IT - Y
2 IT IT - Z
WITH CTEDivisions AS
(
SELECT ....
)
SELECT
c.cnt,
c.Division,
c.Division + ISNULL(' - ' + o.v, '') AS NewDivision
FROM CTEDivisions c
OUTER APPLY(SELECT v FROM(VALUES('X'),('Y'),('Z'))t(v) WHERE c.cnt = 2)o