sql - 根据列值 SQL 将一行拆分为多行

标签 sql sql-server-2012

我有以下“订单表”:

    Item        Quantity
    pencil      2
    pen         1
    Notebook    4

我需要这样的结果:

  Item        Quantity
  pencil      1
  pencil      1
  pen         1
  Notebook    1
  Notebook    1
  Notebook    1
  Notebook    1

最佳答案

您没有指定您正在使用哪个 RDBMS,因此生成数字的方式将取决于此(对于 SQL Server 可能是递归 CTE,对于 Oracle 使用 DUAL 等)。我只编写了代码来处理您所显示的数据,但您显然需要在最终解决方案中考虑大于四的数字。

SELECT
    MT.sr_no,
    MT.item_name,
    1 AS quantity
FROM
    My_Table MT
INNER JOIN
    (
        SELECT 1 AS nbr UNION ALL SELECT 2 AS nbr UNION ALL
        SELECT 3 AS nbr UNION ALL SELECT 4 AS nbr
    ) N ON N.nbr <= MT.quantity

关于sql - 根据列值 SQL 将一行拆分为多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34635133/

相关文章:

SQL 服务器 : Update a colum with Random Value

sql - 如何在集成服务目录中启用创建目录选项?

sql - 如何为 Oracle 使用花括号转义

mysql - 如何使用mysql将一个表的字段与另一个表的其他字段连接起来

sql - MySQL在值之前和之后插入文本

sql-server - SQL Server 2012 的 select * 返回列的顺序是否发生变化?

sql - SQL Server 2012 中基于列的查询加速器

sql - 即使不按时间顺序使用 LIKE 查找 2 个单词

sql - 列名作为全文搜索中的第二个参数 CONTAINS 或 FREETEXT

SQL Server 目录 View 、信息模态视图与 DMV 之间的差异