sql-server - 在 SQL 中取消透视表并按条件连接
问题描述
我有 2 张桌子:
资金
country 2002 2006 2010 2014
Chicago 1000 23000 4500 9076
奖牌
year sport event country gender medal_rank medal
2006 A Z Chicago F 2 silver
1924 B ZZ Newyork M 3 bronze
2014 C ZZZZ Chicago M 1 Gold
1967 B ZZb Newyork M 3 bronze
2014 C ZZa Chicago F 2 silver
我想取消透视基金中的数据,例如
country year value
Chicago 2002 1000
Chicago 2006 23000
Chicago 2010 4500
Chicago 2014 9076
然后加入 Medals,只带来 2002、2006、2010 和 2104 年的奖牌列计数,因为我们在 Funds 中只有这些年份的值。在最后一步中,我将 value/countofmedal 划分为 value/medal。
决赛桌应如下所示:
country year value countofmedeals value/medal
Chicago 2002 1000 0 0
Chicago 2006 23000 1 23000
Chicago 2010 4500 0 0
Chicago 2014 9076 2 4536
以下是我尝试过的代码,但它不起作用。
use RDG
select
S.Yr,
qu.year,
s.Cost,
count(qu.medal)
from
(
select
country,
yr,
Cost
from Funds
unpivot
(
Yr for Cost in ([2002],[2006],[2010],[2014])
) as u
) s
join medals qu
on (s.country=qu.country and s.Yr=qu.year)
group by s.Yr,qu.year,s.Cost
解决方案
declare @Funds table
(
country varchar(20),
[2002] int,
[2006] int,
[2010] int,
[2014] int
);
insert into @Funds(country, [2002], [2006], [2010], [2014])
values ('Chicago', 1000, 23000, 4500, 9076);
declare @Medals table
(
year int,
sport varchar(20),
event varchar(20),
country varchar(20),
gender char(1),
medal_rank tinyint,
medal varchar(20)
);
insert into @Medals(year, sport, event, country, gender, medal_rank, medal)
values
(2006, 'A', 'Z', 'Chicago', 'F', 2, 'silver'),
(1924, 'B', 'ZZ', 'Newyork', 'M', 3, 'bronze'),
(2014, 'C', 'ZZZZ', 'Chicago', 'M', 1, 'Gold'),
(1967, 'B', 'ZZb', 'Newyork', 'M', 3, 'bronze'),
(2014, 'C', 'ZZa', 'Chicago', 'F', 2, 'silver');
select
S.country,
S.Yr,
qu.year /*??*/,
s.value,
count(qu.medal) as countofmedals,
cast(isnull(s.value*1./nullif(count(qu.medal), 0), 0) as decimal(19,2)) as [value/medal]
from
(
select
country,
yr,
value
from @Funds
unpivot
(
value for yr in ([2002],[2006],[2010],[2014]) --!!!!
) as u
) s
left join @medals qu --!!!!
on (s.country=qu.country and s.Yr=qu.year)
group by s.country, s.Yr,qu.year/*??*/,s.value;
推荐阅读
- python - ValueError:缓冲区大小必须是元素大小的倍数
- c - if 条件下发生了什么?
- php - 我正在尝试使用图像制作自定义进度条,但我不确定从哪里开始
- python - Python - 无法解析我拥有的列表数据,如果它在该列表数据中找到特定字母,则删除变量
- php - Symfony - 能够加载配置的扩展
- angular-material - 角材料进度条不起作用
- angular - 从组件向 ViewChild 传递数据 - Angular
- android - 识别蓝牙连接
- android - 结束通话后自动启动应用程序
- typescript - graphql codegen 可以自动为 hooks 的结果数据字段生成类型吗?