我有這兩張桌子
每日資訊
日期 | ID | 姓名 | 地方 |
---|---|---|---|
2022-04-11 | 1 | 瓊 | 空值 |
2022-04-12 | 1 | 瓊 | 空值 |
2022-04-13 | 1 | 瓊 | 空值 |
2022-04-14 | 1 | 瓊 | 空值 |
2022-04-15 | 1 | 瓊 | 空值 |
2022-04-16 | 1 | 瓊 | 空值 |
更改值
日期 | ID | change_col | 新值 |
---|---|---|---|
2022-04-14 | 1 | 地方 | 芝加哥 |
2022-04-16 | 1 | 地方 | 印度 |
2022-04-16 | 1 | 姓名 | 約翰·瓦特 |
從這兩個表中,我想創建一個看起來像這樣的新表
歷史表
日期 | ID | 姓名 | 地方 |
---|---|---|---|
2022-04-11 | 1 | 瓊 | 空值 |
2022-04-12 | 1 | 瓊 | 空值 |
2022-04-13 | 1 | 瓊 | 空值 |
2022-04-14 | 1 | 瓊 | 芝加哥 |
2022-04-15 | 1 | 瓊 | 芝加哥 |
2022-04-16 | 1 | 喬恩·沃茨 | 印度 |
到目前為止,我只能加入這兩個表并嘗試使用case-when子句,我知道我需要使用 lag 但我不確定如何
我的代碼
Select id,
date,
(Case When change_col = 'place' Then new_value End) As place,
(Case When change_col = 'name' Then new_value End) As name
From daily_info
Left Join change_values On d.id = c.id And d.date = c.date
uj5u.com熱心網友回復:
加入(應用)您根據日期更改表,每種更改型別一次。
declare @daily_info table ([date] date, id int, [name] varchar(32), place varchar(32));
insert into @daily_info ([date], id, [name], place)
values
('2022-04-11', 1, 'Jhon', null),
('2022-04-12', 1, 'Jhon', null),
('2022-04-13', 1, 'Jhon', null),
('2022-04-14', 1, 'Jhon', null),
('2022-04-15', 1, 'Jhon', null),
('2022-04-16', 1, 'Jhon', null);
declare @change_values table ([date] date, id int, change_col varchar(32), new_value varchar(32));
insert into @change_values ([date], id, change_col, new_value)
values
('2022-04-14', 1, 'place', 'Chicago'),
('2022-04-16', 1, 'place', 'India'),
('2022-04-16', 1, 'name', 'John,Dan');
select DI.[date], DI.id
, coalesce(CV2.new_value, DI.[name]) [name]
, coalesce(CV1.new_value, DI.place) place
from @daily_info DI
outer apply (
select top 1 change_col, new_value
from @change_values CV
where CV.[date] <= DI.[date] and change_col = 'place'
order by [date] desc
) CV1
outer apply (
select top 1 change_col, new_value
from @change_values CV
where CV.[date] <= DI.[date] and change_col = 'name'
order by [date] desc
) CV2;
回報:
日期 | ID | 姓名 | 地方 |
---|---|---|---|
2022-04-11 | 1 | 瓊 | 空值 |
2022-04-12 | 1 | 瓊 | 空值 |
2022-04-13 | 1 | 瓊 | 空值 |
2022-04-14 | 1 | 瓊 | 芝加哥 |
2022-04-15 | 1 | 瓊 | 芝加哥 |
2022-04-16 | 1 | 約翰,丹 | 印度 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/456555.html
下一篇:選擇每組的第一條和最后一條記錄