gpt4 book ai didi

当列值按日期大于 1 时基于 SQL 拆分行

转载 作者:行者123 更新时间:2023-12-04 00:01:11 26 4
gpt4 key购买 nike

我有一个表,我需要根据一个日期列和另一个值列来拆分列。

基本上当数字列大于一时,我需要在同一日期拆分该列,直到该列等于一。

比如这是进来的数据集

+----------------------------------------------+
| CONF# DATE Numbers Rev |
+----------------------------------------------+
| ------- ----------- ----------- ----------- |
| 24720 01/10/2014 1 35 |
| 24437 11/09/2014 2 450 |
| 24007 04/08/2014 3 15 |
| 24628 25/09/2014 1 100 |
+----------------------------------------------+

我正在寻找的结果

+----------------------------------------------+
| CONF# DATE Numbers Rev |
+----------------------------------------------+
| ------- ----------- ----------- ----------- |
| 24720 01/10/2014 1 35 |
| 24437 11/09/2014 1 225 |
| 24437 11/10/2014 1 225 |
| 24007 04/08/2014 1 5 |
| 24007 04/09/2014 1 5 |
| 24007 04/10/2014 1 5 |
| 24628 25/09/2014 1 100 |
+----------------------------------------------+

返回的结果集将大于一的行分解。rev 在分解的行中平均分配。

我正在尝试为此编写一个光标

    DECLARE cursor_SplitRow CURSOR
FOR SELECT
[Conf#]
FROM [table];

OPEN cursor_SplitRow;
FETCH NEXT FROM cursor_SplitRow INTO
@Conf#;
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @counter INT = 1;
WHILE @counter <= @Numbers
BEGIN
INSERT INTO #TemptTable
VALUES(@CONF# ,
@DATE,
1,
@Rev/@numbers

我认为代码需要运行除以它超过一的数量,所以如果数字是 5,收入必须除以 5 并平均分配,这就是我卡住的地方

最佳答案

您还可以使用临时计数/数字表

示例

Select [Conf#]
,[Date]
,[Numbers] = 1
,[Rev] = Rev/A.Numbers
From YourTable A
Join (
Select Top 1000 N=Row_Number() Over (Order By (Select NULL)) From master..spt_values n1, master..spt_values n2
) B on B.N<=A.Numbers
Order By CONF# Desc

返回

Conf#   Date        Numbers Rev
24720 01/10/2014 1 35.00
24628 25/09/2014 1 100.00
24437 11/09/2014 1 225.00
24437 11/09/2014 1 225.00
24007 04/08/2014 1 5.00
24007 04/08/2014 1 5.00
24007 04/08/2014 1 5.00

关于当列值按日期大于 1 时基于 SQL 拆分行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61240773/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com