2011-10-13 108 views
1

我有3个表。 ,PersonGroup。 每个可以在多个。 在PersonGroup表中有一个名为ShowCount的字段,它表示应该显示一个Person多少次。用SQL选择第n行

例子: 人比尔是在StackOverflow的组和应显示3倍所以输出应该是这样的

Bill 
Bill 
Bill 

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

+1

是的,这是可能的。两个想法:1)加入一个“数字”表2)[递归CTE](http://msdn.microsoft.com/en-us/library/ms186243.aspx)。 –

+0

你的数据模型听起来有点奇怪 - 为什么在同一个组里三次账单? – Paddy

+0

他不是。如果他在那里会有三个参赛作品。 ShowCount表示他的地址应该打印多少次(或者在报告中)。 – domueni

回答

1

你好Numbers表格可以帮你解决。 你可以找到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 

我希望这有助于

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 
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 < = 100