sqlsever存储过程问题

在SQLSEVER中如何用存储过程把图片中的左表数据qty列按chaifenliang列拆分,得到如下图右表

img

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
可以通过以下存储过程把图片中的左表数据qty列按chaifenliang列拆分,得到右表:

CREATE PROCEDURE SplitQtyByChaifenliang
AS
BEGIN
    CREATE TABLE #TempData
    (
        id INT,
        chaifenliang FLOAT,
        qty FLOAT,
        dataIndex INT
    )
    
    INSERT INTO #TempData
    SELECT id, chaifenliang, qty, ROW_NUMBER() OVER(ORDER BY id) AS dataIndex
    FROM leftTable
    
    DECLARE @rowCount INT
    SET @rowCount = @@ROWCOUNT
    
    DECLARE @currentIndex INT
    SET @currentIndex = 1
    
    WHILE @currentIndex <= @rowCount
    BEGIN
        DECLARE @currentId INT
        SET @currentId = (SELECT id FROM #TempData WHERE dataIndex = @currentIndex)
        
        DECLARE @currentQty FLOAT
        SET @currentQty = (SELECT qty FROM #TempData WHERE dataIndex = @currentIndex)
        
        DECLARE @currentChaifenliang FLOAT
        SET @currentChaifenliang = (SELECT chaifenliang FROM #TempData WHERE dataIndex = @currentIndex)

        WHILE @currentQty > 0
        BEGIN
            DECLARE @insertQty FLOAT
            
            IF @currentQty <= @currentChaifenliang
            BEGIN
                SET @insertQty = @currentQty
                SET @currentQty = 0
            END
            ELSE
            BEGIN
                SET @insertQty = @currentChaifenliang
                SET @currentQty = @currentQty - @currentChaifenliang
            END
            
            INSERT INTO rightTable(id, chaifenliang, qty)
            VALUES(@currentId, @currentChaifenliang, @insertQty)
        END
        
        SET @currentIndex = @currentIndex + 1
    END
    
    DROP TABLE #TempData
END

需要把代码中的leftTable和rightTable替换为实际使用的表名。
如果我的回答解决了您的问题,请采纳!

拆分的规则是什么?是平均分为1/3么

可以使用以下SQL语句将数据表按chaifenliang字段拆分:

SELECT pinmu, jiaoqi, qty / chaifenliang as nqty, dingdandaima as ndingdandaima, chaifenliang
FROM your_table_name;

其中,your_table_name为数据表名称,pinmu、jiaoqi、qty、dingdandaima和chaifenliang分别为表中的字段名。通过除以chaifenliang字段,将qty字段按照chaifenliang字段进行拆分,并将结果作为新的字段nqty呈现。

思路应该是这样的,使用游标循环每一条记录根据qty/500 得到拆分的次数,整除的话+1次,然后插入一个临时表,最好查询临时表就可以了。
不过使用存储过程的话,写法会比较麻烦。如果可以的话可以通过后台代码的方式进行实现,这样会快很多