Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL选择第n行_Sql_Sql Server_Database - Fatal编程技术网

使用SQL选择第n行

使用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

我有三张桌子。个人、团体和个人团体。 每个人可以分为多个组。 在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_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的答案: