我有3個表。 人,組和PersonGroup。 每個人可以在多個組。 在PersonGroup表中有一個名爲ShowCount的字段,它表示應該顯示一個Person多少次。用SQL選擇第n行
例子: 人比爾是在StackOverflow的組和應顯示3倍所以輸出應該是這樣的
Bill
Bill
Bill
有沒有辦法用SQL做到這一點?
我有3個表。 人,組和PersonGroup。 每個人可以在多個組。 在PersonGroup表中有一個名爲ShowCount的字段,它表示應該顯示一個Person多少次。用SQL選擇第n行
例子: 人比爾是在StackOverflow的組和應顯示3倍所以輸出應該是這樣的
Bill
Bill
Bill
有沒有辦法用SQL做到這一點?
你好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
我希望這有助於
試試這個
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
所以這就是我們現在怎麼做的:
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
是的,這是可能的。兩個想法:1)加入一個「數字」表2)[遞歸CTE](http://msdn.microsoft.com/en-us/library/ms186243.aspx)。 –
你的數據模型聽起來有點奇怪 - 爲什麼在同一個組裏三次賬單? – Paddy
他不是。如果他在那裏會有三個參賽作品。 ShowCount表示他的地址應該打印多少次(或者在報告中)。 – domueni