我想知道是否可以确定从哪一列中提取合并值?
我有以下示例数据(实际年份范围从1989年到2010年的数据,为简洁而未显示)
ID | 2000 | 2000 value | 2001 |2001 value | 2002 |2002 value | 2003 |2003 value | 2004 | 2004 value | 2005 | 2005 value
id001 | single | 15.46 |regular|50 | NULL | 0 |single | 152 | regular|15.20 |single| 15.99
id002 | regular | 20.46 |regular|17.99 |single | 150.23 |both | 256.3 | NULL | 0 | NULL | 0
其中single / regular / both反映了该ID在该年份为某些事物支付的费用(而NULL表示没有购买)。
我理想的情况是,2005年至2010年期间每年会有三列,告诉您当年之前的最新单笔付款类型(以及它在哪一年下降),以及常规和两种付款方式
因此,对于上面的示例,结果将如下所示:
ID | 2005 prior single year | 2005 prior regular year | 2005 prior both year
id001 | 2003 | 2004 | NULL
id002 | 2002 | 2001 | 2003
我也希望能够提取各自的价值(2005-2010所有年份)。
从根本上说,它只是查看列以查找第一个实例的情况,但除了某种合并之外,我不确定如何最好地接近它!
谢谢! :)
答案 0 :(得分:1)
首先,我写一个视图来规范化数据:
select 2000 as year
, [2000 value] as value
, [2000 type] as type
from YourTable
where year = 2000
union all
select 2001
, [2001 value]
, [2001 type]
from YourTable
where year = 2001
....
然后你可以查看2005年之前的第一年:
select a.year [prior to 2005]
, a.value
, a.id
from YourView a
where year =
(
select max(year)
from YourView b
where a.id = b.id
and a.type = b.type
and b.year < 2005
)
获得规范化数据后,您可以在此主题上创建许多变体。
答案 1 :(得分:1)
从现有表格中,尝试:
select ID,
case 'single'
when [2004] then '2004'
when [2003] then '2003'
when [2002] then '2002'
when [2001] then '2001'
when [2000] then '2000'
else NULL
end [2005 prior single year],
case 'regular'
when [2004] then '2004'
when [2003] then '2003'
when [2002] then '2002'
when [2001] then '2001'
when [2000] then '2000'
else NULL
end [2005 prior regular year],
case 'both'
when [2004] then '2004'
when [2003] then '2003'
when [2002] then '2002'
when [2001] then '2001'
when [2000] then '2000'
else NULL
end [2005 prior both year]
from YourTable YT