2016-10-10 228 views
-2

我目前正在为我们的项目管理软件(这是一个学校项目)进行查询。将单个列拆分为多个列

我有如下表:

projectID  | cID   | value 
---------------|------------------------- 
1    |  3   |  321 
1    |  4   |  442 
2    |  3   |  999 
2    |  4   |  799 

和最终产品应该是这样的:

 c1  |  c2 
---------------|----------------- 
     321  |  442 
     999  |  799 

现在的问题是,有可能是C1,C2无限多的,等等和无数的项目。所以桌子会变得很大(在两个方向上)。

有没有办法让列声明“本身”?如果没有,可以说我将c1,c2,...的数量限制为5,我该怎么办?我想是这样的:

select v1.value, v2.value from value v1, value v2 

回答

0

我相信使用条件汇聚应该让你的转动结果:

select 
    max(case when cid = 3 then value end) as c1, 
    max(case when cid = 4 then value end) as c2, 
    ... 
from yourtable 
group by projectid 

是的,有通过字符串操作和串接和MySQL的过程中建立动态声明的方式然后使用EXECUTE执行它。

+0

所以你的意思是我应该在java中准备字符串“动态”,我明白了。但这意味着我必须先从表格中获取所有cid,然后动态插入它们。 –

+0

我的意思是一切都可以在MySQL程序中完成。这里不需要Java。去谷歌上查询。动态MySQL查询。关于这个问题,在这个问题上也有很多答案。 –