我有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