【问题标题】:select row n times with SQL使用 SQL 选择行 n 次
【发布时间】:2011-10-13 10:59:12
【问题描述】:

我有 3 张桌子。 个人个人组。 每个Person 可以属于多个Groups。 在 PersonGroup 表中有一个名为 ShowCount 的字段,它表示应该显示 Person 的次数。

示例: Person Bill 在 StackOverflow 组中,应该显示 3 次,所以输出应该是这样的

Bill 
Bill 
Bill 

有没有办法用 SQL 做到这一点?

【问题讨论】:

  • 是的,这是可能的。两个想法:1)加入“数字”表 2)recursive CTE.
  • 你的数据模型听起来有点奇怪——为什么 bill 在同一个组中出现了 3 次?
  • 他不是。如果他在,将有三个条目。 ShowCount 说明他的地址应该被打印多少次(或出现在报告上)。
  • 看到这个类似的问题:stackoverflow.com/questions/2472662/…(@van 的回答)

标签: sql sql-server database


【解决方案1】:

您好,数字表可以帮助您解决问题。 功能码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

希望对你有帮助,

【讨论】:

    【解决方案2】:

    试试这个

    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
    

    【讨论】:

      【解决方案3】:

      这就是我们现在的做法:

      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

      【讨论】:

        猜你喜欢
        • 2021-10-20
        • 1970-01-01
        • 1970-01-01
        • 2023-02-07
        • 1970-01-01
        • 1970-01-01
        • 2010-09-28
        • 2020-07-27
        • 1970-01-01
        相关资源
        最近更新 更多