在SQL中返回重复的行数

时间:2014-07-30 17:31:54

标签: sql sql-server sql-server-2008

我有一张这样的表:

|---------|-----|
| Name    | Qty |
|---------|-----|
| Joe     | 3   |
| Bill    | 2   |
| Mike    | 4   |
|---------|-----|

我正在尝试创建一个将返回此内容的SELECT语句:

|--------|
| Name   |
|--------|
| Joe    |
| Joe    |
| Joe    |
| Bill   |
| Bill   |
| Mike   |
| Mike   |
| Mike   |
| Mike   |
|--------|

基本上,无论Qty字段设置为什么,都会返回Name的次数。我发现了一个非常相似的问题here,但这个问题适用于Oracle而我正在使用SQL Server。我也希望在SELECT语句中执行此操作(因为它稍后将在视图中使用),而不必使用临时表或游标。

2 个答案:

答案 0 :(得分:7)

您可以使用递归cte来执行此操作

<强> SQL Fiddle Example

;with cte
as
(select * from table1
union all
select name, qty - 1
from cte
where qty - 1 > 0
)

select name from cte
order by name

答案 1 :(得分:1)

您也可以使用计数器或数字表来执行此操作。这样的递归cte的问题在于它实际上是一行一行的流程。此方法基于100%设置。

create table #table1
(
    Name varchar(10),
    Qty int
);

insert #table1
select 'Joe', 3 union all
select 'Bill', 2 union all
select 'Mike', 4;

WITH
    E1(N) AS (select 1 from (values (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))dt(n)),
    Numbers(N) AS 
    (
        SELECT  ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM E1
    )

select *
from #table1 t
join numbers n on n.N <= t.Qty

drop table #table1