2011-10-13 299 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