例如:现在有以下数据.id code address color qty price
1 苹果 北京 红 4 40
2 苹果 北京 青 3 15
3 苹果 北京 黄 10 100
4 苹果 上海 青 5 25
5 苹果 上海 黄 13 130
6 苹果 广东 黄 15 150
7 柑桔 北京 青 4 40
8 柑桔 北京 黄 3 15
9 柑桔 上海 青 10 100
11 柑桔 广东 青 13 130
12 柑桔 广东 黄 15 150
......要求显示TABLE以下:code address 红 青 黄
qty price qty price qty price
苹果 北京 4 40 3 15 10 100
苹果 上海 0 0 5 25 13 130
苹果 广东 0 0 0 0 15 150
苹果小计: 4 40 8 40 38 380
(空一行)
code address 青 黄
qty price qty price
柑桔 北京 4 40 3 15
柑桔 上海 10 100 0 0
柑桔 广东 13 130 15 150
柑桔小计: 27 270 18 165
......总计 31 310 26 205 38 380
1 苹果 北京 红 4 40
2 苹果 北京 青 3 15
3 苹果 北京 黄 10 100
4 苹果 上海 青 5 25
5 苹果 上海 黄 13 130
6 苹果 广东 黄 15 150
7 柑桔 北京 青 4 40
8 柑桔 北京 黄 3 15
9 柑桔 上海 青 10 100
11 柑桔 广东 青 13 130
12 柑桔 广东 黄 15 150
......要求显示TABLE以下:code address 红 青 黄
qty price qty price qty price
苹果 北京 4 40 3 15 10 100
苹果 上海 0 0 5 25 13 130
苹果 广东 0 0 0 0 15 150
苹果小计: 4 40 8 40 38 380
(空一行)
code address 青 黄
qty price qty price
柑桔 北京 4 40 3 15
柑桔 上海 10 100 0 0
柑桔 广东 13 130 15 150
柑桔小计: 27 270 18 165
......总计 31 310 26 205 38 380
一、 按照品种地点排序数据,然后开始循环
1 显示一个水果的品种和产地
2 显示水果数据
3 下一个
4 判断,如果和上一个品种和产地相同,则在后面继续显示,转2
5 显示空白(显示的数量根据你知道的颜色数量和前面已经显示的颜色数量而定,转1,开始新的一行二、用sql语句,将数据放到一行里面
去搜索关键字
数据库 行转列
的SQL语句就行了,不复杂的。
请指点一下.还有.2楼的第一种方法,我现在在试,谢谢..
表名:aaa
id code address color qty price
1 苹果 北京 红 4 40 1、select distinct code from aaa;2、select code,address,sum(qty1),sum(qty2),sum(qty3) from(
select code,address,qty as qty1,0 as qty2,0 as qty3 from aaa where color='红'
union
select code,address,0 as qty1,qty as qty2,0 as qty3 from aaa where color='青'
union
select code,address,0 as qty1,0 as qty2,qty as qty3 from aaa where color='黄'
) group by code,address
3、1,2步骤各放入一个集合,第一个集合外层循环,第二集合为内层循环看看自己能不能处理了
@RequestMapping("/xml/infolist.jhtml")
public String infolist(HttpServletRequest req, HttpServletResponse resp,Xml xml,ModelMap modelMap){
if(xml.getId()>0){
XmlParameter xml1=new XmlParameter();
xml1.setXmlId(xml.getId());
List<XmlParameter> xmllist=xmlService.loadXmlParameter(xml1);
//List<Block> blocklist=xmlService.getBlock(xml.getId());
PageInfoList<Block> blocklist=xmlService.queryForBock(xml);
List<BlockXmlPvalue> blockxmlpvalue=xmlService.getBlockXmlPvalue(xml);
ArrayList<HashMap> xmllistMap =this.getXmlListMap(xmllist);
ArrayList<HashMap> blockxmlpvalueListMap =this.getBlockXmlPvalueListMap(blocklist,xmllist,blockxmlpvalue); modelMap.addAttribute("xmllistMap",xmllistMap);
modelMap.addAttribute("blockxmlpvalueListMap",blockxmlpvalueListMap);
modelMap.addAttribute("blocklist",blocklist);
}
return "xmlview.infolist";
}
/**
* 将list转换成map(即将纵表的数据拼接成横表展示)
*
* @param xmllist 数据集合
* @return list 返回组合好的数据集合
*/
private ArrayList<HashMap> getXmlListMap(
List<XmlParameter> xmlList) {
ArrayList<HashMap> reXmlList = new ArrayList<HashMap>();
HashMap hashMap = null; // 将结果封装到map里
for (XmlParameter xmlParameter : xmlList) {
hashMap = new HashMap();
hashMap.put("xmlId", xmlParameter.getXmlId());
hashMap.put("displayname", xmlParameter.getDisplayName());
hashMap.put("type", xmlParameter.getType());
hashMap.put("rank", xmlParameter.getRank());
reXmlList.add(hashMap);
}
return reXmlList;
}
/**
* 将list转换成map(即将纵表的数据拼接成横表展示)
*
* @param xmllist 数据集合
* @return list 返回组合好的数据集合
*/
private ArrayList<HashMap> getBlockXmlPvalueListMap(
List<Block> blocklist,
List<XmlParameter> xmlList,
List<BlockXmlPvalue> blockxmlpvalue) {
ArrayList<HashMap> reblockxmlpvalueList = new ArrayList<HashMap>();
HashMap hashMap = null;
int ListSize = blockxmlpvalue.size();
// 将结果封装到map里
for (Block block : blocklist) {
hashMap = new HashMap();
hashMap.put("xmlId", block.getXmlId());
hashMap.put("code", block.getCode());
hashMap.put("name", block.getName());
String parameterValues="";
for (int i = 0; i < ListSize;i++) {
BlockXmlPvalue fblockxmlpvalue = blockxmlpvalue.get(i);
if (block.getCode().equals(fblockxmlpvalue.getBlockCode())) { hashMap.put(fblockxmlpvalue.getRank(), fblockxmlpvalue.getValue());
if (i == 0) {
parameterValues = blockxmlpvalue.get(i).getValue() + ",";
} else {
parameterValues += blockxmlpvalue.get(i).getValue()+",";
}
blockxmlpvalue.remove(blockxmlpvalue);
}
}
XmlData xmldata1=new XmlData();
xmldata1.setXmlId(block.getXmlId());
xmldata1.setParameterValues(parameterValues);
List<XmlData> xmldata=xmlService.loadXmlData(xmldata1);
if(xmldata.size()>0){
hashMap.put("updatedtime", xmldata.get(0).getUpdatedTime());
} reblockxmlpvalueList.add(hashMap);
}
return reblockxmlpvalueList;
}
<table width="100%" cellspacing="0" class="sytable" cellpadding="0" id="bbstr">
<tr>
<th>对应引用版块</th>
<th>引用版块名称</th>
<c:forEach items="${xmllistMap}" var="xml" varStatus="s">
<th>${xml.displayname}</th>
</c:forEach>
<th>最后抓取时间</th>
</tr>
<c:forEach items="${blockxmlpvalueListMap}" var="blockxmlpvalue" varStatus="s">
<tr>
<td>${blockxmlpvalue.code}</td>
<td>${blockxmlpvalue.name}</td>
<c:forEach items="${xmllistMap}" var="xml" varStatus="s">
<td>${blockxmlpvalue[xml.rank]}</td>
</c:forEach>
<td><fmt:formatDate value="${blockxmlpvalue.updatedtime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
</tr>
</c:forEach> </table>
SQL sum(字段)函数不可以做统计吗?