当前位置: 首页 > 面试题库 >

如何将一行扩展为多行结果集?

公冶高义
2023-03-14
问题内容

我有一个表,我试图根据第二列的值将每一行分成一个或多个行。像这样:

table (id, pcs):
ABC   3
DEF   1
GHJ   4

query result (id, pcs_num):
ABC   1
ABC   2
ABC   3
DEF   1
GHJ   1
GHJ   2
GHJ   3
GHJ   4

我将其编写为SQL Server
2008中的sproc。我最好的解决方案是使用游标并向临时表中为表中的每一行添加[pcs]行数。似乎必须有一个比我所缺少的解决方案更简单的解决方案。谢谢。


问题答案:

您可以使用递归CTE:

;WITH CTE AS
(
    SELECT *
    FROM YourTable
    UNION ALL 
    SELECT id, pcs-1
    FROM CTE
    WHERE pcs-1 >= 1
)
SELECT *
FROM CTE
ORDER BY id, pcs
OPTION(MAXRECURSION 0)

这是一个演示供您尝试。



 类似资料:
  • 问题内容: 如果我有这样的话: 给出以下结构: 如何将其扩展到以下内容? 问题答案: 您可以用来遍历每一行,并使用列表推导将数据重塑为所需的形式: 产量 ivakar的解决方案,是最快的: 这是用于上述基准测试的设置:

  • 问题内容: 在Postgres 9.3数据库中,我有一张表,其中一列包含JSON,如下面示例中所示的测试表所示。 JSON始终是一个包含可变数量哈希值的数组。每个哈希始终具有相同的键集。我正在尝试编写一个查询,该查询为JSON数组中的每个条目返回一行,并为每个哈希键和Things表中的ID设置列。我希望输出如下所示: 即,两行用于JSON数组中包含两项的条目。是否可以让Postgres做到这一点?

  • 有没有办法在presto中有效地将行扩展为列? 我尝试用“where team=1”和“where team=2”分别过滤原始数据集,首先相应地获得dataset1和DataSet2,然后在income_level上连接这两个数据集。然而,当income_level有太多不同的值时,这是不方便的。有没有什么高效的方法可以得到我想要的结果?

  • 问题内容: 我有两个查询,每个查询返回一个结果,即一个数字 结果 。 结果 我希望将两个结果合并为一行记录,即 问题答案: 您可以使用: 说明:您可以在select语句中选择单个值作为字段,因此可以编写如下内容: 这仅对 标量 查询有效 ,这意味着子查询应具有精确的1列,最多1行。如果有0行,则ValueFromY将返回,而如果有1行以上,则查询将失败。 (在SQL Server,MySQL和其他

  • 问题内容: 如何使用JDBC检查结果集是否具有一行或更多行? 问题答案: 您没有问这个,但是您可能需要它: 通常,我们不需要行计数,因为我们使用WHILE循环而不是FOR循环来遍历结果集: 但是,在某些情况下,您可能希望对结果进行加窗显示,并且需要提前记录数以向用户显示。您可以先执行一个单独的查询来获取记录计数,但是请注意,计数只是一个近似值,因为可以在执行两个查询的时间之间添加或删除行。 Res

  • 问题内容: 我有两个表要合并。第一个表与客户一起使用,另一个表与产品一起使用。目前,我有22种产品,但我希望有一个灵活的数据库设计,因此与其在产品数据库中没有22列,我为每个客户为每个产品提供1行,所以如果我总体上添加或删除1种产品,我不会必须更改数据库结构。 我想有一条select语句,在这里我为每个客户端选择所有产品,并且输出应该在一行中,每个产品都有一列。 我看到了其他一些类似的问题,但这样