多次选择一组行

时间:2014-11-25 16:57:22

标签: sql-server tsql sql-server-2012

是否有一种简单,简洁的方法来选择基于变量中保存的计数重复的同一组行,而不使用循环?

例如,假设SELECT a, b, c FROM foo WHERE whatsit = something返回

a   b   c
--- --- ----
1   2   3

...我的@count里面有3。有没有循环的合理方法:

a   b   c
--- --- ----
1   2   3
1   2   3
1   2   3

?订单并不重要,我也不需要知道任何给定行属于哪个组。我实际上只需要这一行(如上所述),并且只适用于一行的解决方案可以解决这个问题,但我认为如果我们可以为一个行完成,我们可以为任何数字执行此操作。

3 个答案:

答案 0 :(得分:5)

尝试使用Recursive CTE

WITH cte
     AS (SELECT 1 AS id,a,b,c
         FROM   tablename
         UNION ALL
         SELECT id + 1,a,b,c
         FROM   cte
         WHERE  id < 3) --@count
SELECT a,b,c
FROM   cte 

答案 1 :(得分:0)

使用cross join

的另一种方法
SELECT a, b, c
FROM Table1
CROSS JOIN (SELECT number
            FROM master.dbo.spt_values
            WHERE type = 'P'
            AND number BETWEEN 1 AND 3) T

答案 2 :(得分:-2)

如果没有循环或动态SQL,我不知道如何做到这一点。我认为工会就是我能提出的所有工作

select q1.a,q1.b,q1.c
from (
    SELECT a, b, c FROM foo 
    union all
    SELECT a, b, c FROM foo 
    union all
    SELECT a, b, c FROM foo ) q1
order by q1.a