我有一张具有巨大值(value)的表格,如下所示。稍后将在表的 SERVICE 列中添加“fbb”类型值。
SITE_NAME SERVICE BANDWIDTH
MBCGP1 3g 30
BONWRT 3g 40
BORNR1 3g 30
MBCGP1 2g 8
BONWRT 2g 4
BORNR1 2g 8
BOSBB1 2g 8
我想将这些值插入到这样的表中。
SITE_NAME 2g_bw 3g_bw fbb_bw
MBCGP1 8 30 0
BONWRT 4 40 0
BORNR1 8 30 0
BOSBB1 8 0 0
我不知道如何编写一条sql。
最佳答案
您可以使用该表的一个实例用于 2g,另一个用于 3g,然后连接这些表。
select 2g.site_name, 2g.bandwidth 2g_bw, 3g.bandwidth 3g_bw, 0 fbb_bw
from yourtable 2g
join yourtable 3g
on 3g.site_name = 2g.site_name
and 3g.service = '3g'
where 2g.service = '2g'
然后,您可以使用 INSERT ... SELECT
将结果插入到另一个表中
insert into othertable (site_name, 2g_bw, 3g_bw, fbb_bw)
select 2g.site_name, 2g.bandwidth 2g_bw, 3g.bandwidth 3g_bw, 0 fbb_bw
from yourtable 2g
join yourtable 3g
on 3g.site_name = 2g.site_name
and 3g.service = '3g'
where 2g.service = '2g'
更新
正如 @Strawberry 所建议的,您可以使用完整联接从 2g 或 3g(不是两者)中获取 null。
select 2g.site_name, 2g.bandwidth 2g_bw, 3g.bandwidth 3g_bw, 0 fbb_bw
from yourtable 2g
left outer join yourtable 3g
on 3g.site_name = 2g.site_name
and 3g.service = '3g'
where 2g.service = '2g'
union
select 3g.site_name, 2g.bandwidth 2g_bw, 3g.bandwidth 3g_bw, 0 fbb_bw
from yourtable 3g
left outer join yourtable 2g
on 2g.site_name = 3g.site_name
and 2g.service = '2g'
where 3g.service = '3g'
第一个请求获取与 2G 和 3G 关联的结果,第二个请求获取与 3G 和 2G 关联的结果。如果您合并这些结果,则一定会检索到所有结果。
关于mysql - 如何将行转置为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37268315/