使用SQL选择第n行
我有三张桌子。个人、团体和个人团体。 每个人可以分为多个组。 在PersonGroup表中有一个名为ShowCount的字段,它表示一个人应该显示多少次 例如: 人员票据在组StackOverflow中,应显示3次,因此输出应如下所示使用SQL选择第n行,sql,sql-server,database,Sql,Sql Server,Database,我有三张桌子。个人、团体和个人团体。 每个人可以分为多个组。 在PersonGroup表中有一个名为ShowCount的字段,它表示一个人应该显示多少次 例如: 人员票据在组StackOverflow中,应显示3次,因此输出应如下所示 Bill Bill Bill 有没有办法用SQL实现这一点?试试这个 select P.name from person P join PersonGroup pg on pg.person_id=p.id join master.dbo.spt_valu
Bill
Bill
Bill
有没有办法用SQL实现这一点?试试这个
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
您好,数字表可以帮助您解决问题。 您可以在以下位置找到功能代码: 下面是一个示例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
我希望这会有所帮助,所以我们现在就是这样做的:
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是的,这是可能的。两个想法:1加入数字表2。你的数据模型听起来有点奇怪-为什么比尔在同一组中三次?他不是。如果他在,将有三个条目。ShowCount表示他的地址应该打印多少次或出现在报告中。请参见以下类似问题:@van的答案或@Evan的答案: