sql为每一行添加额外的行

rus*_*sds 6 sql t-sql sql-server sql-server-2012

是否可以根据字段值向选定集添加其他行?

我有这个问题:

WITH CTEDivisions AS
(
    SELECT ....
)

SELECT 
    cnt,
    Division
FROM CTEDivisions
Run Code Online (Sandbox Code Playgroud)

哪个回报:

  cnt         Division
  1           Sales
  2           Marketing
  1           Business
  2           IT
  etc...
Run Code Online (Sandbox Code Playgroud)

我需要的是一个声明,返回3个额外的行cnt = 2,如:

 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...
Run Code Online (Sandbox Code Playgroud)

我已经搜索了这样做的方法,并找到了一些使用cursorWHILE循环的可能解决方案,但这些似乎与CTE语句一起使用.

Vla*_*nov 5

为额外的行创建一个表(作为 CTE,或作为永久表)并使用您的条件 ( ) 左连接cnt=2

DECLARE @T TABLE(cnt int, Division varchar(100));
INSERT INTO @T(cnt, Division) VALUES
(1, 'Sales'),
(2, 'Marketing'),
(1, 'Business'),
(2, 'IT');

WITH
CTEDivisions
AS
(
    SELECT
        cnt
        ,Division
    FROM @T
)
,CTE_Extra
AS
(
    SELECT ' - X' AS Extra
    UNION ALL
    SELECT ' - Y' AS Extra
    UNION ALL
    SELECT ' - Z' AS Extra
)
SELECT
    cnt
    ,Division
    ,Division + ISNULL(Extra, '') AS NewDivision
FROM
    CTEDivisions
    LEFT JOIN CTE_Extra ON CTEDivisions.cnt = 2
;
Run Code Online (Sandbox Code Playgroud)

结果集

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
Run Code Online (Sandbox Code Playgroud)


Gio*_*uri 5

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
Run Code Online (Sandbox Code Playgroud)