将值转换为单行

Wha*_*sUP 5 sql sql-server sql-server-2008

当前

Name   Quantity
---------------
Stella       2
Jennifer     2
Greg         3 
Run Code Online (Sandbox Code Playgroud)

要求的结果

Name    Quantity 
---------------
Stella       1
Stella       1
Jennifer     1
Jennifer     1
Greg         1
Greg         1 
Greg         1 
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

declare @T table  
(  
  Name varchar(50),  
  Sales int  
)  
insert into @T values  
('Stella',   '2'),  
('Jennifer', '2'), 
('Greg',     '3')
Run Code Online (Sandbox Code Playgroud)

Tim*_*ner 2

使用递归并借用 Michael Fredrickson 的设置代码:

declare @T table (  
  Name varchar(50),  
  Sales int  
)

insert into @T values ('Stella',   '2')  
insert into @T values ('Jennifer', '2') 
insert into @T values ('Greg',     '3')

-- Recursive verion
;with People (Name, Sales) as
(
    select Name, Sales
    from @T
    union all
    select Name, Sales - 1
    from People
    where Sales - 1 > 0
)
select Name, 1 as Quantity
from People
option (maxrecursion 0) -- Recurse without limit
Run Code Online (Sandbox Code Playgroud)

这似乎在我的机器上运行得更快(根据查询计划,比 Michael Fredrickson 的机器快 5 倍,但逻辑读取更多),但这并不重要。