数据透视表和聚合多个参数
这是我的基础表:
Region year carsSold bicyclesSold RegX 1999 50 100 RegX 2000 150 30 RegY 1998 60 40
我想结果是:
Region Year 1998 1999 2000 RegX carsSold 0 50 150 bicyclesSold 0 100 30 RegY carsSold 60 0 0 bicyclesSold 40 0 0
有没有办法在SQL Server中做到这一点? 有没有办法在Excel中做到这一点? 这种数据呈现的最佳解决scheme是什么? 你能build议任何适合的软件吗?
我知道在sql服务器中旋转表,但不能写任何东西会给结果接近我想要的东西
select P.Region, P.Item, isnull(P.[1998], 0) as [1998], isnull(P.[1999], 0) as [1999], isnull(P.[2000], 0) as [2000] from YourTable unpivot (ItemsSold for Item in (carsSold, bicyclesSold)) as U pivot (sum(ItemsSold) for year in ([1998], [1999], [2000])) as P order by P.Region, P.Item
SQL小提琴
作为替代scheme,只能使用符合ANSI-92的代码。 嘿,你甚至可以在SQLite中运行这个,除了关于方括号列名的部分。
当你说出exactly what I want
从字面上 exactly what I want
select case when veh.iscar=1 then t.region else '' end Region, veh.type [Year], max(case when t.year = 1998 then carsSold*iscar + bicyclesSold*(1-iscar) else 0 end) [1998], max(case when t.year = 1999 then carsSold*iscar + bicyclesSold*(1-iscar) else 0 end) [1999], max(case when t.year = 2000 then carsSold*iscar + bicyclesSold*(1-iscar) else 0 end) [2000] from YourTable t cross join ( select 'carsSold',1 union all select 'bicyclesSold',0) veh(type,iscar) group by t.region, veh.type, veh.iscar order by t.region, type desc; >> Region Year 1998 1999 2000 RegX carsSold 0 50 150 bicyclesSold 0 100 30 RegY carsSold 60 0 0 bicyclesSold 40 0 0