使用mysql选择结果生成二维坐标
我对mysql查询有疑问 我有一个表,下面有数据使用mysql选择结果生成二维坐标,mysql,sql,Mysql,Sql,我对mysql查询有疑问 我有一个表,下面有数据 From To Weight -------------- A B 1 A C 3 B C 2 D E 4 我想得到如下的sql结果 (?) A B C D E ---------------------- A 0 1 3 0 0 B 0 0 2 0 0 C 0 0 0 0 0 D 0 0 0 0 4
From To Weight
--------------
A B 1
A C 3
B C 2
D E 4
我想得到如下的sql结果
(?) A B C D E
----------------------
A 0 1 3 0 0
B 0 0 2 0 0
C 0 0 0 0 0
D 0 0 0 0 4
E 0 0 0 0 0
而原始表中的数据并没有确定。
我怎样才能做到这一点 如果您知道原始列,可以执行以下操作:
select c.col1,
sum(case when to = 'A' then weight else 0 end) as a,
sum(case when to = 'B' then weight else 0 end) as b,
sum(case when to = 'C' then weight else 0 end) as c,
sum(case when to = 'D' then weight else 0 end) as d,
sum(case when to = 'E' then weight else 0 end) as d
from (select 'A' as col1 union all select 'B' union all select 'C' union all select 'D' union all select 'E'
) c left join
t
on t.from = c.col1
group by c.col1;
如果不知道原始列,可以将这些值组合成单个字符串:
select col1.col,
group_concat(col2.col, ':', t.weight order by col2.col)
from ((select `from` as col from t
) union -- on purpose to remove duplicates
(select `to` from t
)
) col1 cross join
((select `from` as col from t
) union -- on purpose to remove duplicates
(select `to` from t
)
) col2 left join
t
on col1.col = t.`from` and col2.col = t.`from`
group by col1.col;
如果你想要单独的列,不知道这些值,那么你需要动态SQL ./P>考虑在应用程序代码中处理这样的与显示相关的需求(例如:PHP、C++、java)。SQL不适合处理动态列数(使用动态名称)@MadhurBhaiya实际上我已经尝试过了,但原始数据的大小太大,无法在应用程序代码中处理。