使用SQL选择行n次

时间:2011-10-13 10:59:13

标签: sql sql-server database

我有3张桌子。 群组 PersonGroup 。 每个可以位于多个群组中。 在 PersonGroup 表中有一个名为 ShowCount 的字段,该字段表示应显示的次数。

实施例: Person Bill在StackOverflow组中,应该显示3次,所以输出应该是这样的

Bill 
Bill 
Bill 

有没有办法用SQL做到这一点?

3 个答案:

答案 0 :(得分:1)

试试这个

select P.name
from person P
join PersonGroup pg on pg.person_id=p.id
join master.dbo.spt_values where type='P' and number>0 and number <= pg.ShowCount

答案 1 :(得分:1)

您好,数字表可以帮助您解决问题。 您可以在http://www.kodyaz.com/articles/sql-server-tsql-cte-numbers-table.aspx

找到功能代码

这是一个示例t-sql脚本

select
    pg.showcount,
    p.name,
    g.groupname
from PersonGroup pg
inner join Person p on p.personid = pg.personid
inner join Groups g on g.groupid = pg.groupid
inner join dbo.NumbersTable(1,12,1) n on pg.showcount >= n.i

我希望这有帮助,

答案 2 :(得分:0)

所以我们现在就这样做了:

WITH ShowCounter AS (SELECT 1 AS ShowCount 
            UNION ALL
            SELECT ShowCount + 1
            FROM ShowCounter 
            WHERE (ShowCount + 1 <= 100))
SELECT Person.Name
FROM ShowCounter 
INNER JOIN Person ON ShowCounter.ShowCount <= Person.ShowCount
ORDER BY PersonGroup.PersonGroupID 

适用于ShowCount&lt; = 100