【发布时间】:2016-04-03 06:23:38
【问题描述】:
我有下表:
ID_Client | Counter | Length | Amount | Date_From | Date_To
-------------------------------------------------------------
AAA 0 25 30 2015-01-09 2015-01-15
AAA 2 25 30 2015-01-15 2015-02-06
AAA 2 25 30 2015-02-06 2015-03-10
AAA 1 25 30 2015-03-10 2015-04-12
AAA 1 25 30
AAA 2 25 30
AAA 1 25 30
AAA 1 25 30
AAA 1 25 30
AAA 2 25 30 2016-04-01 9999-99-99 Infinity (last record for AAA at the moment)
BBB 0 30 60
BBB 1 30 60
BBB 2 30 60
BBB 2 30 60
Value1 列:
Value1 的第 1 行 = Counter 的第 1 行
Value1 的第 2 行 = Value1 的第 1 行 + Counter 列的第 2 行等。
Value2 列:
Value2 的第 1 行 = 金额的第 1 行
Value2 的第 2 行 = Value2 的第 1 行 - Counter 列的第 2 行等
结果应按 ID_Client 分组。 Value1 和 Value 2 应该在新客户时重新开始计数。
我需要这张桌子:
ID_Client | Counter | Length | Amount | Value1 | Value2
--------------------------------------------------------
AAA 0 25 30 0 30
AAA 2 25 30 2 28
AAA 2 25 30 4 26
AAA 1 25 30 5 25
AAA 1 25 30 6 24
AAA 2 25 30 8 22
AAA 1 25 30 9 21
AAA 1 25 30 10 20
AAA 1 25 30 11 19
AAA 2 25 30 13 17
BBB 0 30 60 0 60
BBB 1 30 60 1 59
BBB 2 30 60 3 57
BBB 2 30 60 5 55
谢谢
【问题讨论】:
-
是什么决定了这些的顺序?顺序不重要吗?或者这张桌子的PK是多少?
-
如何定义第一行?
-
看起来像一个非常糟糕的数据库设计。那么ID的所有记录必须具有相同的长度和数量?应该有一个客户端表,每个客户端 ID 只包含一个包含这两个值的记录。
-
@PM77-1:在每组客户端的开头第一行有 null 但我使用 ISNULL 更改为 0
-
@user2988195:所以第一行是计数器为 NULL 或 0 的行。好的。但哪个是第二个,哪个是第三个?没有列来指示记录的顺序(如日期时间等)。
标签: sql sql-server tsql