我现在的情况简述: 我希望合并两个单独的日志文件,以便在另一个时间获取一个日志的值。
我有两个桌子
为了计算给定的价格,在统一的UOM(度量单位)中,我们将转换因子用作乘数
例如1box(转换系数)* 200(价格)= 100pcs(转换系数)* 2(价格)
我们数据中的价格和转换因子两个字段都在日志上显示了类似的内容
Date Part_No Supplier_Id Old_Value New_Value
------------ --------- ------------- ----------- -----------
11-09-2019 A B 1 5
19-09-2019 A B 5 1
由于可以在同一天进行多次更改,因此名为LOG_ID的列是唯一的整数
我希望将表转换为可以使用起始/结束日期连接在一起的东西
所以我想要的输出如下所示(请注意,第一行具有静态的From_Date,最后一行的当前日期为To_Date
Part_No Supplier_Id From_Date To_Date Value
--------- ------------- ------------ ------------ -------
A B 01-03-2010 10-09-2019 1
A B 11-09-2019 18-09-2019 5
A B 19-09-2019 23-10-2020 1
我认为需要将透视功能与循环结合使用,但是我无法完全弄清楚如何将两者结合起来以识别直到今天为止直到今天为止所做的更改。
答案 0 :(得分:1)
根据先前对这个问题的回答,我走到了这么远
SELECT
Part_No,
Supplier_Id,
Date AS From_Date,
ISNULL(DATEADD(dd,-1,lead(Date) OVER (PARTITION BY Part_No, Supplier_Id ORDER BY Date)),Date) AS To_date,
New_Value
FROM
data_Table
这将导致以下输出
Part_No Supplier_Id From_Date To_date New_Value
------------- ------------- ------------ ------------ -----------
1032515-001 5277 11-09-2019 18-09-2019 5
1032515-001 5277 19-09-2019 19-09-2019 1
不幸的是,正如我最初的问题所解释的那样,这并不是我想要的。下表显示了我想要的输出:
Part_No Supplier_Id From_Date To_Date Value
--------- ------------- ------------ ------------ -------
A B 01-03-2010 10-09-2019 1
A B 11-09-2019 18-09-2019 5
A B 19-09-2019 23-10-2020 1
静态第一个from_date,当前日期作为动态最终to_date
答案 1 :(得分:0)
您需要利用UNPIVOT,然后利用LEAD功能来实现:
DECLARE @table table(dateval date,partno char(1), supplierid char(1),
old_value int, new_value int)
insert into @table
values
('2019-09-11','A','B',1,5),
('2019-09-19','A','B',5,1);
select partno, supplierid, dateval as From_Date,
isnull(dateadd(dd,-1,lead(dateval) over (partition by partno, supplierid order by dateval)),dateval) as To_date, val
from @table
unpivot
(
val
for keyv in ([old_value],[new_value])
) as upvt
where keyv = 'old_value'
+--------+------------+------------+------------+-----+
| partno | supplierid | From_Date | To_date | val |
+--------+------------+------------+------------+-----+
| A | B | 2019-09-11 | 2019-09-18 | 1 |
| A | B | 2019-09-19 | 2019-09-19 | 5 |
+--------+------------+------------+------------+-----+