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

根据列将行拆分为2行或更多行

张瀚漠
2023-03-14
问题内容

我有一个问题,如果我有一排像这样

|订单号|数量|商品号|
| 123125213 | 3 | fffff111 |

我如何将其分成三行,如下所示:

|订单号|数量|商品号|
| 123125213 | 1 | fffff111 |
| 123125213 | 1 | fffff111 |
| 123125213 | 1 | fffff111 |

/ J


问题答案:

您可以使用递归CTE:

WITH RCTE AS 
(
    SELECT  
        ordernumber, qty, articlenumber, qty AS L
    FROM Table1

    UNION ALL

    SELECT      
        ordernumber, 1, articlenumber, L - 1 AS L
    FROM RCTE
    WHERE L>0
)
SELECT  ordernumber,qty, articlenumber
FROM RCTE WHERE qty = 1

SQLFiddleDEMO

编辑: 基于Marek Grzenkowicz的回答和MatBailie的评论,全新的想法:

WITH CTE_Nums AS 
(
    SELECT MAX(qty) n FROM dbo.Table1
    UNION ALL
    SELECT n-1 FROM CTE_Nums
    WHERE n>1  
)
SELECT  ordernumber ,
        1 AS qty,
        articlenumber
FROM dbo.Table1 t1
INNER JOIN CTE_Nums n ON t1.qty >= n.n

生成从1到max(qty)的数字,并在其上加入表。

SQLFiddle演示



 类似资料:
  • 问题内容: 我有一个具有这种结构的表。 我无法弄清楚我将使用哪种SQL查询来获得这样的结果集: 我正在尝试将三列分为三个单独的行。这可能吗? 问题答案: SELECT Y.UserID, Y.UserName, QuestionName = ‘AnswerToQuestion’ + X.Which, Response = CASE X.Which WHEN ‘1’ THEN AnswerToQue

  • 问题内容: 我试图根据该行的单元格中的值将其分为两行。例如,我具有以下表结构(这是一个临时表,没有任何键,索引或任何其他内容,我可以在另一个临时表中选择拆分结果): 然后,应将其拆分为: 问题答案: 我将使用

  • 问题内容: 我的问题是我有一个这样的表: c1 | c2 | c3 | c4是一个由|分隔的值。 我的最终结果应如下所示: 我该怎么做呢? 谢谢 问题答案: 这就是您可以执行的操作,使用管道将字符串拆分并使用spark函数爆炸数据 输出: 希望这可以帮助!

  • 问题内容: 我已使用从IMDB收集信息并将其传输到MYSQL数据库的应用程序导入了一些数据。 似乎这些字段尚未标准化,并且在1个字段中包含许多值 例如: 有没有办法将这些值分开,然后将它们插入到另一个表中,而不重复呢? 我进行了一些谷歌搜索,发现我应该使用PHP处理此数据。但是我一点都不了解PHP。 无论如何,仅使用MYSQL即可转换此​​数据? 问题答案: 您可以使用存储过程,该过程使用游标来解

  • 正在尝试从csv文件中读取数据,将每行拆分为各自的列。 但是,当某个列本身带有逗号时,我的正则表达式就失败了。 例如:a, b, c,"d, e, g,", f 我想要的结果是: 也就是5列。 下面是用逗号分隔字符串的正则表达式am ,(?=(?:“[^”]?(?:[^”])*)),(?=[^”](?:,),$) 但是它对少数字符串失败,而对其他字符串有效。 我想要的是,当我使用pyspark将c

  • 我在 spark 中有一个数据帧: 此处,所有列均为字符串数据类型。 如何在多列中使用分解功能,并创建如下所示的新数据框: 在新的数据帧中,所有列都是字符串数据类型。