将列转换为行并在不同表中进行求和查询

vx6bjr1n  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(214)

我试图在sitetable中转换sumtchtraffic和totalpayloadgb列,并在techtable中计算totalpayloadgb和sumtchtraffic的数据总和,其中bts\u类型为2g、3g和4g
我试过这样做,但是我不能在列[sum of]中显示totalpayloadgb&sumtchtraffic([sum of]不在我数据库的任何表中)

select * from (select
sum(case when techtable.BTS_TYPE='2G' then sitetable.TotalPayloadGb else 0 end) as [Total 2G],
sum(case when techtable.BTS_TYPE='3G' then sitetable.TotalPayloadGb else 0 end) as [Total 3G],
sum (case when techtable.BTS_TYPE='4G'then sitetable.TotalPayloadGb else 0 end) as [Total 4G]

from sitetable 

inner join techtable on sitetable.sitename = techtable.sitename) as t

我想这样显示我的数据:

bq8i3lrv

bq8i3lrv1#

一种方法是分别对结果求和,使用已启动的相同条件聚合,然后 UNION 把结果放在一起。由于第一列在其他任何地方都不存在,因此必须将其硬编码到查询中。

SELECT 
    'TotalPayloadGb' AS SumOf,
    sum(CASE WHEN t.BTS_TYPE = '2G' THEN s.TotalPayloadGb ELSE 0 END) AS [Total 2G],
    sum(CASE WHEN t.BTS_TYPE = '3G' THEN s.TotalPayloadGb ELSE 0 END) AS [Total 3G],
    sum(CASE WHEN t.BTS_TYPE = '4G' THEN s.TotalPayloadGb ELSE 0 END) AS [Total 4G]
FROM sitetable AS s
INNER JOIN techtable AS t
    ON s.sitename = t.sitename
UNION
SELECT 
    'SumTCHTraffic' AS SumOf,
    sum(CASE WHEN t.BTS_TYPE = '2G' THEN s.SumTCHTraffic ELSE 0 END) AS [Total 2G],
    sum(CASE WHEN t.BTS_TYPE = '3G' THEN s.SumTCHTraffic ELSE 0 END) AS [Total 3G],
    sum(CASE WHEN t.BTS_TYPE = '4G' THEN s.SumTCHTraffic ELSE 0 END) AS [Total 4G]
FROM sitetable AS s
INNER JOIN techtable AS t
    ON s.sitename = t.sitename;
dwthyt8l

dwthyt8l2#

根据您要做的事情,您可以这样做:

SELECT tt.BTS_Type, sum(st.TotalPayloadDb)
 FROM SiteTable st
    INNER JOIN TechTable as tt on st.sitename = tt.sitename

这将为每个bts\U类型值提供一行。

相关问题